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...
[U3D] Attaccare oggetti ad altri
- 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
Schiva 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é?
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?
- 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
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 :
Il codice dell' obj_car :
Create :
Destroy :
// lo so questo non occorreva che lo mettessi , ma ...
Step :
Evento premi SPACE //Non obbligatorio
Evento rilascia SPACE //Non obbligatorio
Evento OutsideRoom
Ora il codice dell' obj_wheel :
Create :
Step :
Destroy :
// lo so questo non occorreva che lo mettessi , ma ...
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;
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();
- 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
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!
@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:
Progetti in corso:
Spoiler
- 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
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!
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!
Schiva 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é?
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?
- 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
ebbene.. ci sono riuscito!!! 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!
@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!!
@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!
@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:
Progetti in corso:
Spoiler
Chi c’è in linea
Visitano il forum: Nessuno e 25 ospiti