Scusa Eclipse ma nella tua libreria non c'è una funzione per il salto del personaggio? Vorrei far saltellare un po' Rigell!
C'è irrlitch 0.6 da scaricare il 0.5 non è scaricabile...
Nella prossima lezione visto che lo desideri metterò come fare saltare e sparare il personaggio e come creare un menù iniziale.
Intanto se ti va puoi sperimentare qualcosa facendo muovere l'altro tuo personaggio con altri tasti, magari le lettere oppure facendo in modo che premendo F2 si selezioni rigell e con f3 si selezioni l'altro durante il gioco, (un po' come le squadre speciali su Rainbow Six o su hidden and dangerous) ecco 1 metodo che puoi usare:
metti questo su globali:
scene::IAnimatedMeshSceneNode* personaggio_selezionato=0;
sul loop principale modifica i vari "if (GetAsyncKeyState(VK_UP)) {PW_Muovi_Oggetto(rigell,6);
anim=1;}" ecc con
if (GetAsyncKeyState(VK_UP)) {PW_Muovi_Oggetto (personaggio_selezionato,6); anim=1;}
ecc per tutti i comandi... poi anche su "aggiusta camera" invece di
PW_Lega_Camera_a_Oggetto(camera,rigell,100);
metti
PW_Lega_Camera_a_Oggetto(camera,personaggio_selezionato,10 0);
poi sempre dentro al loop, magari sotto gli altri comandi via tastiera così il codice è più ordinato, aggiungi le righe
if (GetAsyncKeyState(VK_F2)) personaggio_selezionato=rigell;
if (GetAsyncKeyState(VK_F3)) personaggio_selezionato=altropersonaggio;
dove al posto di "altropersonaggio" devi mettere la variabile che hai usato x l'altro personaggio.
Se ti interessa iscriviti al forum di Playerworld.it se non ci sei ancora e magari posta qualche screenshot dei cambiamenti che hai apportato alla lezione! Ci sono molti ragazzi che lavorano a tanti progetti,primo fra tutti un complesso sparatutto 3d basandosi su irrlicht con il mio aiuto!
E forse stiamo pure per iniziare un platform
Ciao, spero di aver svegliato almeno in te una vena creativa, chissà che pian piano non esca un bel videogioco!
Ultima modifica di Eclipse; 22-03-2004 alle 21:48:28
#include <irrlicht.h>
#include <wchar.h>
#include <windows.h>
using namespace irr;
#pragma comment(lib, <Irrlicht.lib>)
#include "eclipse.h"
//==================================//
//Globali
IrrlichtDevice *device;
scene::ISceneManager* smgr;
video::IVideoDriver* driver;
scene::ICameraSceneNode* camera=0;
scene::IAnimatedMeshSceneNode* rigell=0;
scene::IAnimatedMeshSceneNode* pg2=0;
scene::IAnimatedMeshSceneNode* personaggio_selezionato=0;
//==================================//
//==================================//
int main(){
//funzioni "figlio" di Main
void carica_mappa();
void carica_modelli();
void animazione_rigell(int n);
//carica engine
device = createDevice(video::EDT_OPENGL , core::dimension2d<s32>(750, 550),
16, false, false, NULL);
driver = device->getVideoDriver();
PW_debug_driver(driver);
smgr = device->getSceneManager();
//decomprimi files
device->getFileSystem()->addZipFileArchive("world.zip");
device->getFileSystem()->addZipFileArchive("models.zip");
//chiamata alla funzione carica_mappa
carica_mappa();
carica_modelli();
personaggio_selezionato=rigell; //inizializzo il movimento a rigell
//LOOP PRINCIPALE
while(device->run()){
driver->beginScene(true, true, video::SColor(255,90,90,156));
//comandi tastiera
//Comandi Rigell
int anim=0;
if (GetAsyncKeyState(VK_UP)) {PW_Muovi_Oggetto (personaggio_selezionato,6); anim=1;}
if (GetAsyncKeyState(VK_DOWN)) {PW_Muovi_Oggetto (personaggio_selezionato,-6); anim=1;}
if (GetAsyncKeyState(VK_LEFT)) {PW_Ruota_Oggetto_Y(personaggio_selezionato,-3); anim=1;}
if (GetAsyncKeyState(VK_RIGHT)) {PW_Ruota_Oggetto_Y(personaggio_selezionato,3); anim=1;}
if (GetAsyncKeyState(VK_SHIFT)) {PW_gestione_gravita(pg2,-2); anim=1;}
if (GetAsyncKeyState(VK_CONTROL)) {PW_gestione_gravita(pg2,2); anim=1;}
animazione_rigell(anim);
if (GetAsyncKeyState(VK_F2)) personaggio_selezionato=rigell;
if (GetAsyncKeyState(VK_F3)) personaggio_selezionato=pg2;
//aggiusta camera
PW_Lega_Camera_a_Oggetto(camera,personaggio_selezionato,10 0);
core::vector3df camcord=camera->getPosition();
camcord.Y+=60;
camera->setPosition(camcord);
PW_gestione_gravita(rigell, 4);
PW_gestione_gravita(pg2, 0); //è una farfalla, vola + o -...
smgr->drawAll();
driver->endScene();
}//fine loop
device->drop();
return 0;
} //fine programma
//==================================//
//==================================//
void carica_mappa(){
//crea telecamera
camera= smgr->addCameraSceneNode();
//carica ambiente 3d
scene::ISceneNode* mappa=PW_carica_mappa(smgr, "stadium.3ds");
//luci speciali
//rossa
scene::IBillboardSceneNode * bill1 = smgr->addBillboardSceneNode();
bill1->setMaterialType(video::EMT_TRANSPARENT_ADD_COLOR );
bill1->setMaterialTexture(0, driver->getTexture("luce1.bmp"));
bill1->setMaterialFlag(video::EMF_LIGHTING, false);
bill1->setSize(core::dimension2d<f32>(20.0f, 20.0f));
bill1->setPosition(core::vector3df (-1200,-100,400));
smgr->addLightSceneNode(bill1, core::vector3df(0,0,0),
video::SColorf(1.0f,0,0,1.0f),900.0f);
//verde
scene::IBillboardSceneNode * bill2 = smgr->addBillboardSceneNode();
bill2->setMaterialType(video::EMT_TRANSPARENT_ADD_COLOR );
bill2->setMaterialTexture(0, driver->getTexture("luce2.bmp"));
bill2->setMaterialFlag(video::EMF_LIGHTING, false);
bill2->setSize(core::dimension2d<f32>(20.0f, 20.0f));
bill2->setPosition(core::vector3df (1200,-100,400));
smgr->addLightSceneNode(bill2, core::vector3df(0,0,0),
video::SColorf(0,1.0f,0,1.0f),900.0f);
//blu
scene::IBillboardSceneNode * bill3 = smgr->addBillboardSceneNode();
bill3->setMaterialType(video::EMT_TRANSPARENT_ADD_COLOR );
bill3->setMaterialTexture(0, driver->getTexture("luce3.bmp"));
bill3->setMaterialFlag(video::EMF_LIGHTING, false);
bill3->setSize(core::dimension2d<f32>(20.0f, 20.0f));
bill3->setPosition(core::vector3df (0,-100,-400));
smgr->addLightSceneNode(bill3, core::vector3df(0,0,0),
video::SColorf(0,0,1.0f,1.0f),900.0f);
//luce normale
smgr->addLightSceneNode(NULL, core::vector3df(1200,-100,400), video::SColorf(1.0f,1.0f,1.0f,1.0f),6000.0f);
}
//==================================//
//==================================//
void carica_modelli(){
//Rigell: personaggio principale
rigell= smgr->addAnimatedMeshSceneNode(smgr->getMesh("rigell.ms3d"));
rigell->setMaterialTexture(0, driver->getTexture("rigell.bmp"));
PW_setta_animazione_ms3d(rigell,0,32,94);
rigell->setAnimationSpeed(1000);
rigell->setPosition(core::vector3df(0,0,100));
rigell->setRotation(core::vector3df(0,270,0));
PW_collisione(rigell);
pg2= smgr->addAnimatedMeshSceneNode(smgr->getMesh("faerie.md2"));
pg2->setMaterialTexture(0, driver->getTexture("faerie2.bmp"));
PW_setta_animazione_ms3d(pg2,0,32,30);
pg2->setAnimationSpeed(500);
pg2->setPosition(core::vector3df(0,0,100));
pg2->setRotation(core::vector3df(0,270,0));
PW_collisione(pg2);
}
//==================================//
//==================================//
void animazione_rigell(int n){
int static last=0;
if (last!=n){ last=n;
//fermo
if (n==0)
PW_setta_animazione_ms3d(rigell,0,32,94);
rigell->setAnimationSpeed(600);
//cammina
if (n==1)
PW_setta_animazione_ms3d(rigell,34,55,94);
rigell->setAnimationSpeed(1000);
}
}//fine animazione
//==================================//
Il codice sopra postato è il mio Main.cpp. Come vedete il secondo personaggio (pg2) è una faerie (nel codice ho scritto farfalla, ma l'idea è quella ) per aggiungere il personaggio dovete avere nella cartella del vostro progetto i file faerie.md2 e faerie2.bmp oppure faerie5.bmp.
I 3 files li torvate nella cartella media dell' Irrlicht. Se notat ho aggiunto al sistema di swich dei personaggi postato da Eclipse anche un'idea che mi è venuta in mente: visto che la faerie vola e che la posizione nell'asse Z dei personaggi è gestita (almeno in parte) dalla funzione "PW_gestione_gravita" ho associato una variazione della gravità ai tasti shift e ctrl che in pratica fanno rispettivamente alzare in volo la faerie e farla scendere.
X eclipse: volevo postare questo anche su playerworld ma per adesso è down.
Si, stiamo spostando i server... nella chat di www.playerworld.it oggi alle 22 abbiamo 1 software house professionale, non mancate!
Abbiamo problemi al server, infatti le immagini e i files della guida non sono disponibili al momento :/
Eclipse sei un grande, non sai consigliarmi una guida per cominciare a programmare in C++ da 0?
ne esistono davvero tante, cerca con www.google.it "guida c++"+"principianti" o "guida di base"+"c++"
Io ho scaricato irrlicht 0,6 perche il 0,5 non era disponibile,fa niente??
Poi volevo sapere come posso fare per creare il mio personaggio giocante da zero o modificarne uno gia esistente.
Comunque questa guida è veramente splendida e azzeccatissima per quello che voglio fare site grandi
Ma se per programmare faccio copia e incolla da quello che avete scritto sul forum succede niente,non dovrebbe andare ugualmente non perche io ho fatto tutto pero quando premo f9 per compilare mi compaiono una 50 di errori del tipo loadbuild error e cose del genere a cosa puo essere dovuto piu omeno 8(
Ultima modifica di Desuel; 1-04-2004 alle 19:08:26
scarica il codice dal link che ho messo alla fine invece di incollarlo dal forum, per gli errori invece scrivimene qualcuno e dimmi se sono errori di linking o di compilazione (nel primo caso vuol dire che hai sbagliato qualcosa nella configurazione del progetto, nel secondo invece c'è un errore di sintassi nel codice).Desuel
Io ho scaricato irrlicht 0,6 perche il 0,5 non era disponibile,fa niente??
Poi volevo sapere come posso fare per creare il mio personaggio giocante da zero o modificarne uno gia esistente.
Comunque questa guida è veramente splendida e azzeccatissima per quello che voglio fare site grandi
Ma se per programmare faccio copia e incolla da quello che avete scritto sul forum succede niente,non dovrebbe andare ugualmente non perche io ho fatto tutto pero quando premo f9 per compilare mi compaiono una 50 di errori del tipo loadbuild error e cose del genere a cosa puo essere dovuto piu omeno 8(
Ho fatto anche 1 lezione su come modificare modelli con Milksape, ho avuto problemi con il mio server cmq la rimetterò online prestissimo.
ehm... ho problemi quando inserisco il personaggio
fino a li nessuno problema ma quando inserisco le linee
void carica_modelli();
carica_modelli();
e il resto a fine file
mi si crea un problema: rigell non è stato dichiarato...
cmq è normale che ogni volta che sbaglio qualcosa mi evidenzi eclipse.h?
thx
SkulL iZa
PC:
AMD Athlon64 3200+ 2.0 GHz - 512 RAM DDR - HD 160 + 140 GB - Audio Integrated System - Radeon9800 128MB - Windows Vista Ultimate - Alice ADSL on NETGear DG834
PC Sony VAIO serie CR:
Intel Core 2 Duo T7100 1.8 GHz - 2024 RAM DDR2 - HD 120 GB -14" Screen size on Intel Graphic Media Accelerator X3100 - Windows Vista Home Premium - Alice ADSL on NETGear DG834
metti la riga
scene::IAnimatedMeshSceneNode* rigell=0;
su globali
e scusa x il ritardo ma non posto + con la frequenza di un tempo