[U3D] Attaccare oggetti ad altri

Argomenti riguardanti il D3D di GameMaker e librerie esterne.
Avatar utente
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: [U3D] Attaccare oggetti ad altri

Messaggio da BaronVsCorsar »

suggerimento per il debug.
scorri il tuo codice e aggiungi uno show_message("sono arrivato a xxxxxxx, lo step è: " +string(global.step))
in tutti i punti dove:
- aggiorni la posizione (macchina e pezzo attaccato)
- disegni a schermo (macchine e pezzo attaccato)

in global.step metti il numero di step dall'inizio (non mi pare ci sia una variabile built-in, gestiscila tu).
in xxxxx metti:
- il nome dell'oggetto
- il numero di istanza
- l'evento in cui hai inserito lo show_message
- altri dati utili per il debug (x, y, eventuali delta, rotazioni e altro)

Ovviamente il tutto non sarà gicabile, ma seguendo pezzo per pezzo il flusso degli eventi (per ogni istanza e oggetto coinvolto) puoi capire se c'è un errore di ordine di aggiornamento posizione/disegno a video o di calcolo o che altro...

Richiede molto tempo, ma in questi casi disperati il debug "intensivo" è utile... :work:
ImmagineSchiva questo - http:\\baronvscorsar.altervista.org
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?

Avatar utente
civic71
GMI Advanced
Messaggi: 2210
Iscritto il: 23/10/2003, 17:31
Specialità: Risotto con zucchine
Uso: GM:Studio 1.4 Pro
Località: Jesolo (venezia)
Contatta:

Re: [U3D] Attaccare oggetti ad altri

Messaggio da civic71 »

Ero troppo incuriosito ed ho realizzato una versione per gm 5.0 con i tuoi file 3D e la demo di Jack per le matrici .
Il tutto mi risulta che funziona senza problemi e con pochissimo codice :

Ti riporto il codice per la versione di gm 5.0 ma dovrebbe funzionare anche con le altre.
Prova a copiarlo in un nuovo progetto gmk

Considerando che ho utilizzato il file Basic.gmd di u3D dove sono già presenti gli object camera e control , ho poi creato questi 2 object :
  • obj_car
  • obj_wheel


Il codice dell' obj_car :
Create :

Codice: Seleziona tutto

speed2=0;
x=50;
MaxVelocita=20;
acceleration=0.1;
file="models/SL65.an8";
LoadMesh();

z=5;
//SmoothNormals();
//SwitchShadows(true);
SetModelMaterial(1,200,200,255,255);


//AGGIUNGI RUOTE LATO SINISTRO
instance_create(13,7.5,obj_wheel);
instance_create(-12.5,7.5,obj_wheel);


//AGGIUNGI RUOTE LATO DESTRO
instance_create(-12.5,-7.5,obj_wheel);
instance_create(13,-7.5,obj_wheel);



Destroy :
// lo so questo non occorreva che lo mettessi , ma ...

Codice: Seleziona tutto

Destroy();

Step :

Codice: Seleziona tutto

if (speed2<MaxVelocita){speed2+=acceleration*(keyboard_check(vk_space));};
if ! keyboard_check(vk_space){speed2=0;}


Move(0,roty+90,speed2);
Step();



room_caption=string('SPEED2 : ')+string(speed2);

Evento premi SPACE //Non obbligatorio

Codice: Seleziona tutto

//la camera seguirà la car
camera.follow=id;
camera.perspective=1;
camera.distance=70;
Evento rilascia SPACE //Non obbligatorio

Codice: Seleziona tutto

//la camera smette di seguire la car
camera.follow=0;
camera.perspective=0;


Evento OutsideRoom

Codice: Seleziona tutto

//Ritorna al punto di partenza
x=xstart;
y=ystart;
camera.x=camera.xstart;
camera.y=camera.ystart;


Ora il codice dell' obj_wheel :
Create :

Codice: Seleziona tutto

file='models/wheel.3ds';
LoadMesh();
z=1;
matrice=GetObjectTransformation(id);

ruote_destre=false;
if instance_number(obj_wheel)>2{ruote_destre=true;rotx+=180;}

Step :

Codice: Seleziona tutto

//"modifica" la matrice del modello figlio usando i suoi parametri
CreateTransformationMatrix(matrice,x,y,-2,rotx,roty,rotz,scalx,scaly,scalz);
//se esiste l'oggetto principale
if (instance_number(obj_car)!=0){ //trasforma la matrice usando quella del modello principale
                                  TransformMatrix(matrice,matrice,GetObjectTransformation (obj_car));
                                 }


//ruotazione delle ruote in base alla velocità dell obj_car
if ruote_destre=false{rotz-=obj_car.speed2*2;}else{rotz+=obj_car.speed2*2;}





Destroy :
// lo so questo non occorreva che lo mettessi , ma ...

Codice: Seleziona tutto

Destroy();

Avatar utente
fra3point
Membro attivo
Messaggi: 388
Iscritto il: 24/08/2010, 15:16
Specialità: Prog. e 3D Modelling
Località: L'Aquila
Contatta:

Re: [U3D] Attaccare oggetti ad altri

Messaggio da fra3point »

Sto giocando un po' con il debug.. fin'ora nulla di strano.. P.S. La stampa a video delle variabili la stavo utilizzando già da tempo!

@civic: Il tuo esempio funziona alla grande, prova che c'è qualche errore nel mio gmk e che... posso farcela a risolverlo!
Ora provo a "rivedere" il mio codice in base al tuo, magari qualcosa esce fuori! ;)
draw_text(100,100,"fra3point");

Progetti in corso:
Spoiler
Tuning Paradise --> 10%

Saw: The Game --> 60%

Tropic Races --> 40%

Avatar utente
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: [U3D] Attaccare oggetti ad altri

Messaggio da BaronVsCorsar »

non suggerivo la stampa a video delle variabili!
usa show_message. Questo appare non nell'evento draw, ma immediatamente.
Se l'errore è nell'ordine di valutazione delle posizioni, aggiornamento x-y, o disegno te ne accorgi.
Se stampi a video le variabili tu vedi il valore che ahnno in draw, non l'ordine con cui vengono cambiate!
ImmagineSchiva questo - http:\\baronvscorsar.altervista.org
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?

Avatar utente
fra3point
Membro attivo
Messaggi: 388
Iscritto il: 24/08/2010, 15:16
Specialità: Prog. e 3D Modelling
Località: L'Aquila
Contatta:

Re: [U3D] Attaccare oggetti ad altri - RISOLTO

Messaggio da fra3point »

ebbene.. ci sono riuscito!!! :banana: :banana: Grazie ai vostri preziosi consigli ho trovato l'errore!!! Le matrici erano scritte in modo giusto, solo che nell'oggetto macchina mettevo Step() nell'evento step. Io l'ho spostato in Begin Step ed ora tutto si aggiorna in modo corretto!!!!

@civic: sto usando il tuo codice in sostituzione al mio per posizionare le ruote a partire da un solo oggetto! è tutto molto più snello ora! Grazie! :D

@jak: ti ringrazio per tutti gli utili consigli che mi hai dato. Senza, a quest'ora, starei ancora impazzendo!

@BaronVsCorsar: Avevi ragione, ci voleva proprio un uso massiccio di debug estremo!! ;)
draw_text(100,100,"fra3point");

Progetti in corso:
Spoiler
Tuning Paradise --> 10%

Saw: The Game --> 60%

Tropic Races --> 40%

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 16 ospiti