• Benvenuto in Making Videogames!
  • Dai sfogo alla tua fantasia!
  • Crea il tuo Videogioco!
Benvenuto ospite! Login Registrati




Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
Problema con Newton
#1
Stò avendo uno strano problema con Newton o.o Allora.. io ho un livello, creo l'albero delle collisioni e fin qui tutto ok. Creo un cubo sia in darkbasic che con newton e ok. Provo: lo vedo scendere normalmente quindi la gravità funziona. Ho il debug attivo e quindi vedo anche le linee di collisione. Il problema è che il cubo cade sul mio livello, l'effetto fisico c'è e non c'è: il cubo inizia a girarsi ma non si ferma! Passa attraverso il livello e continua a scendere o.o

A qualcuno è già successo??
 
Rispondi
#2
postami il source e vedo dove sta il problema
 
Rispondi
#3
Questa è la sub per creare e inizializzare la fisica Smile
Codice:
// Creazione gruppi fisici
crea_fisica:
    // Avvia il motore fisico
    NDB_NewtonCreate
    
    // Crea un mondo di default
    NDB_SetVector 1, -5000.0, -5000.0, -5000.0 // Parte da rivedere
    NDB_SetVector 2, 5000.0, 5000.0, 5000.0    // Parte da rivedere
    NDB_NewtonSetWorldSize
    
    // Gravità
    NDB_SetVector 0.0, -50.0, 0.0
    NDB_SetStandardGravity
    
    // Gruppi fisici
    NDB_Group_Default = NDB_NewtonMaterialGetDefaultGroupID()
    NDB_Group_Player = NDB_NewtonMaterialCreateGroupID()
    
    // NDB_Group_Default > NDB_Group_Player
    NDB_NewtonMaterialSetDefaultFriction NDB_Group_Default, NDB_Group_Player, 0.01, 0.01
    NDB_NewtonMaterialSetDefaultElasticity NDB_Group_Default, NDB_Group_Player,  0.01
return
I 2 gruppi fisici servono solamente al giocatore principale per eliminare l'attrito, ma non li ho ancora usati.

Questa è la funzione che uso per creare il cubo. Non fare caso a ENT_Crea() e a ENT_getObjID(i), servono per aggiungere 1 entità alla lista delle entità e per prendere l'oggetto assegnato a quell'entità Wink


Codice:
// Creazione di un cubo
function ENT_makeBox(sizex,sizey,sizez,x,y,z,anglex,angley,anglez)
    // Crea lo spazio per un'entità
    i = ENT_crea()
    // Prendiamo l'oggetto dell'entità
    obj = ENT_getObjID(i)
    // Crea il cubo in darkbasic
    make object box obj,sizex,sizey,sizez
    position object obj, x,y,z
    rotate object obj, anglex,angley,anglez
    // Crea il cubo in newton
    collIndex = NDB_NewtonCreateBox( sizex,sizey,sizez )
    // Creo il rigidbody per la collissione
    Body = NDB_NewtonCreateBody( collIndex )
    arrEntita(i).bodyID = Body;
    
    // Setto angolazione e posizione
       NDB_BuildMatrix  object angle x(obj), object angle y(obj), object angle z(obj) , object position x(obj) , object position y(obj)-size, object position z(obj)
       NDB_NewtonBodySetMatrix Body
  
    // Setto la massa e il momento di inerzia
    mass# = 50
    NDB_CalculateMIBoxSolid mass#, size, size, size
    NDB_NewtonBodySetMassMatrix Body, mass#
    // Rilascio la collisione
    NDB_NewtonReleaseCollision collIndex
    // ... e collego l'oggetto fisico a quello visuale.
    NDB_BodySetDBProData body, obj
    NDB_NewtonBodySetDestructorCallback Body
    NDB_BodySetGravity Body, 1
endfunction i

Questa è la sub per caricare il mondo:
Codice:
carica_mondo:
    cls
    CENTER TEXT screen width()/2,screen height()/2, "Caricamento del mondo in corso...."
    SYNC

    // Step 1: Caricamento del mondo
    objWorld = FreeObject()
    load object "media\levels\ndb.dbo", objWorld
    // Step 2: Creazione delle collisioni
    Col = NDB_NewtonCreateTreeCollision( objWorld )
    Room = NDB_NewtonCreateBody( Col )
    // Step 3: Collegamento oggetti
    NDB_BodySetDBProData Room, objWorld
    NDB_NewtonBodySetDestructorCallback Room
    // Rilascio memoria
    NDB_NewtonReleaseCollision Col
    // Caricamento dei dati del mondo
    gosub carica_dati_mondo
return

Il ciclo di gioco è semplice:
Codice:
    if shiftkey() = 1 and oldshift = 0
        x# = -100
        y# = 800
        z# = 800
        ENT_makeBox(50,50,50,x#,y#,z#,0,0,0)
    endif
    oldshift = shiftkey()
    
    // Aggiorna la fisica
    time# = NDB_GetElapsedTimeInSec()
    NDB_NewtonUpdate time#
              sync
E' davvero strano, fino a ieri funzionava tutto o.o
 
Rispondi
#4
che bello !! un'altro che usa "//" al posto di "rem" in darkbasic pro !! XD
a parte gli scherzi sta sera lo controllo anche se ad una prima occhiata sembra abbastanza corretto
 
Rispondi
#5
(06-01-2011, 05:36 PM)zapetino Ha scritto: che bello !! un'altro che usa "//" al posto di "rem" in darkbasic pro !! XD
a parte gli scherzi sta sera lo controllo anche se ad una prima occhiata sembra abbastanza corretto

xD Sono abituato con il C# e la sintassi del Java per questo metto i commenti in quel modo xD Infatti è corretto perchè funzionava, poi boh.. non sono riuscito a capire quale parte di codice ho modificato, magari intaccatto anche di poco, e non và più o.o

Se ti serve, questo è l'inizio del programma:
Codice:
// Gruppi fisici, utilizzati per la fisica
global NDB_Group_Default                                // Non modificare
global NDB_Group_Player                                    // Non modificare

// Variabili generali
global time# as float
dim arrEntita() as Entita                                // Insieme di tutte le entità
endGame as integer = 0                                    // Se viene messo ad 1, fà chiudere il gioco
currentCamera as integer  = 1                            // La telecamera iniziale
fog_enable as integer  = 0                                // Se impostato a 1, attiva la nebbia
fog_r# as integer = 255                                    // [Rosso] della nebbia
fog_g# as integer  = 255                                // [Verde] della nebbia
fog_b# as integer  = 255                                // [Blu] della nebbia
font_name$  as string = "Verdana"                         // Font da usare nel gioco
font_size#  as integer  = 12                            // Grandezza del font
sky_color = RGB(192,237,254)                            // Sky color
camera_range_view = 5000                                // La distanza massima per una telecamera

// Variabili NON MODIFICABILI
global objWorld = 0                            // E' l'id dell'oggetto del livello
global entPlayer = 0                        // E' l'id dell'entità del giocatore principale
 
Rispondi
#6
ma ci stai scrivendo un engine per caso??
 
Rispondi
#7
(06-01-2011, 08:01 PM)zapetino Ha scritto: ma ci stai scrivendo un engine per caso??

Si Smile Al momento supporta (supportava xD) la fisica e ho già l'editor di mappe come quello di FPS Creator Smile Adesso stò implementando altre cose vicino le entità Smile
 
Rispondi
#8
mmmmmmmmm potresti postarlo o magari inviarmelo via pm ?? mi piacerebbe vederlo

comunque il source è apparentemente giusto prova a rivedere le collisioni del cubo, di solito il problema sta lì
 
Rispondi
#9
(06-01-2011, 09:44 PM)zapetino Ha scritto: mmmmmmmmm potresti postarlo o magari inviarmelo via pm ?? mi piacerebbe vederlo

comunque il source è apparentemente giusto prova a rivedere le collisioni del cubo, di solito il problema sta lì

Appena correggo l'errore preparo l'editor (serve 3D World Studio) e ti mando una demo Smile Adesso provo a riscrivere tutte le collisioni Undecided

Edit
Ho trovato l'errore. Sul calcolo del momento di inerzia avevo messo delle variabili inesistenti :-P E' stato un errore di aggiornamento del codice in quanto per creare un rigidbody per il cubo avevo dato solo una dimensione (chiamata all'inizio "size") mentre poi ho cambiato e ho dato tre dimensioni (sizex,sizey,sizez) ma non ho modificato il momento di inerzia Smile
 
Rispondi
#10
ah ecco credevo che quelle variabili le inizializzavi in un'altra parte del source.......
 
Rispondi
#11
Adesso che funziona ho un'altro problema Tongue
Essendo che il giocatore è controllato da Newton (la fisica) come faccio a farlo muovere? Riesco a farlo girare per bene, ma muovere decentemente in avanti è un pò difficile....
 
Rispondi
  


Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  Problema con darkshader.. Alche 1 1,176 03-04-2011, 10:09 AM
Ultimo messaggio: Jonathan Archer
  DarkBasic Newton Wrapper Riddick 16 3,059 17-11-2010, 04:04 PM
Ultimo messaggio: Alche

Vai al forum:


Browsing: 1 Ospite(i)