Collisions

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

DaviD4D

Betreff: Collisions

BeitragMo, Jul 18, 2005 18:52
Antworten mit Zitat
Benutzer-Profile anzeigen
1000 mal biete ich um Verzeihung wenn es schon geklärt wurde (wenn es so ist biete um Link)

habe ein Problem mit der Collision mit beweglichen Objecten... z.B. ich habe ein Spiceship und wenn ich mich in dem befinde und versuche den Ship zu bewegen, falle ich durch den Boden... sogar wenn ich es so mache, dass ich ein Child vom Ship bin, klappt es nicht... habe schon ein paar Leute gefragt, und keiner weisst, wie man es so machen kann, damit die Collision mit beweglichen objecten funktioniert...
 

feider

ehemals "Decelion"

BeitragDi, Jul 19, 2005 16:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist das Programm 2d oder 3d???
Was genau ist der Fehler?
Gibt es auch Code?

ciao
wammerl

DaviD4D

BeitragDi, Jul 19, 2005 22:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Wammerl hat Folgendes geschrieben:
Ist das Programm 2d oder 3d???
Was genau ist der Fehler?
Gibt es auch Code?

ciao
wammerl
Beispielsweise:

BlitzBasic: [AUSKLAPPEN]

Graphics3D 640,480,32,2
SetBuffer BackBuffer()

camera=CreateCamera()
PositionEntity camera,0,10,-20

RotateEntity CreateLight(),45,0,20


Boden=1
Spieler=2

FloorEntity=CreateCube()

ScaleMesh FloorEntity,50,2,50
EntityColor FloorEntity,100,150,30
EntityType FloorEntity,Boden


PlayerEntity=CreateSphere()
EntityColor PlayerEntity,100,50,50
PositionEntity PlayerEntity,0,5,0
EntityType PlayerEntity,Spieler

Collisions Spieler,Boden,2,2

Repeat

If Not EntityCollided(PlayerEntity,1)
TranslateEntity PlayerEntity,0,-0.05,0
Else

If KeyDown(200) Then TranslateEntity PlayerEntity,0,0,0.1
If KeyDown(208) Then TranslateEntity PlayerEntity,0,0,-0.1

If KeyDown(205) Then TranslateEntity PlayerEntity,0.1,0,0
If KeyDown(203) Then TranslateEntity PlayerEntity,-0.1,0,0

EndIf

If KeyDown(57) Then
ResetEntity PlayerEntity
TranslateEntity PlayerEntity,0,0.3,0
EndIf

If KeyDown(30) Then TranslateEntity FloorEntity,-0.1,0,0
If KeyDown(32) Then TranslateEntity FloorEntity,0.1,0,0

If KeyDown(17) Then TranslateEntity FloorEntity,0,0.1,0
If KeyDown(31) Then TranslateEntity FloorEntity,0,-0.1,0



UpdateWorld
RenderWorld
Flip

Until KeyHit(1)

End


jetzt pass auf.. mit "ADWS" bewegst du den Boden (links, rechts, up, down) die Taste "W" führt zum Problem.. warum fällt der Kugel durch den boden?? Smile
 

Beaner

BeitragMi, Jul 20, 2005 0:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh ja ich erinnere mich dunkel, daß ich das Problem auch schon mal hatte.
Eine Lösung für das Problem mit der Collision hab ich nicht, aber ich habe es dann so gemacht, daß ich der beweglichen Plattform einen eigenen EntityType zu gewiesen habe, wenn dann Spieler und Plattform kollidiert sind, habe ich dann einfach per PositionEntity den Y Wert des Spielers an den der Plattform + 1 oder so angepasst. So müßte es dann eigentlich gehen, auch wenn es nicht gerade die schönste Lösung ist.

*Edit

So hab das jetzt mal in deinen Beispiel Code geschrieben und mit ;;;; markiert. Der Haken: Du kannst den Spieler nicht mehr bewegen. Läßt sich auch noch ändern hatte aber keine Lust mehr. Wenn es bei dir eh nur darum geht, daß der Player brav im Raumschiff sitzen bleibt und man ihn nicht bewegen soll, dann müßte das ne akzeptable Lösung sein. Mußt halt EntityX / Z noch anpassen

BlitzBasic: [AUSKLAPPEN]

Graphics3D 640,480,32,2
SetBuffer BackBuffer()

camera=CreateCamera()
PositionEntity camera,0,10,-20

RotateEntity CreateLight(),45,0,20


Boden=1
Spieler=2
ele=3

FloorEntity=CreateCube()

ScaleEntity FloorEntity,50,2,50
EntityColor FloorEntity,100,150,30
EntityType FloorEntity,Boden


PlayerEntity=CreateSphere()
EntityColor PlayerEntity,100,50,50
PositionEntity PlayerEntity,0,5,0
EntityType PlayerEntity,Spieler

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
elevator = CreateCube()
ScaleEntity elevator,5,1,5
EntityColor elevator,0,0,200
PositionEntity elevator,0,2,0
EntityType elevator,ele
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Collisions Spieler,Boden,2,2

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Collisions Spieler,ele,2,2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Repeat

If Not EntityCollided(PlayerEntity,1)
TranslateEntity PlayerEntity,0,-0.05,0
Else

If KeyDown(200) Then TranslateEntity PlayerEntity,0,0,0.1
If KeyDown(208) Then TranslateEntity PlayerEntity,0,0,-0.1

If KeyDown(205) Then TranslateEntity PlayerEntity,0.1,0,0
If KeyDown(203) Then TranslateEntity PlayerEntity,-0.1,0,0

EndIf

If KeyDown(57) Then
ResetEntity PlayerEntity
TranslateEntity PlayerEntity,0,0.3,0
EndIf

If KeyDown(30) Then TranslateEntity FloorEntity,-0.1,0,0
If KeyDown(32) Then TranslateEntity FloorEntity,0.1,0,0

If KeyDown(17) Then TranslateEntity FloorEntity,0,0.1,0
If KeyDown(31) Then TranslateEntity FloorEntity,0,-0.1,0


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
If EntityCollided(PlayerEntity,3) Then
PositionEntity PlayerEntity,EntityX(PlayerEntity),EntityY(elevator) + 2.1,EntityZ(PlayerEntity)
TranslateEntity elevator,0,.1,0
End If
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


UpdateWorld
RenderWorld
Flip

Until KeyHit(1)

End
 

Dreamora

BeitragMi, Jul 20, 2005 0:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum dein Code nicht funktioniert ist glaub leicht einleuchtend:

Beim Collide wird der Spieler um 0.05 nach oben verschoben.
Du hingegen bewegst die Platte beim bewegen um 0.1
-> über kurz oder lang MUSS der Spieler durchfallen, wenn die Platte immer nach oben geht.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Beaner

BeitragMi, Jul 20, 2005 1:47
Antworten mit Zitat
Benutzer-Profile anzeigen
UUUUUPS solang hab ichs gar nicht laufen lassen......is spät

DaviD4D

BeitragMi, Jul 20, 2005 10:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Beaner hat Folgendes geschrieben:
Oh ja ich erinnere mich dunkel, daß ich das Problem auch schon mal hatte.
Eine Lösung für das Problem mit der Collision hab ich nicht, aber ich habe es dann so gemacht, daß ich der beweglichen Plattform einen eigenen EntityType zu gewiesen habe, wenn dann Spieler und Plattform kollidiert sind, habe ich dann einfach per PositionEntity den Y Wert des Spielers an den der Plattform + 1 oder so angepasst. So müßte es dann eigentlich gehen, auch wenn es nicht gerade die schönste Lösung ist.
Schau mal was ich inzwischen gefunden habe... könnte auch eine Lösung sein Smile

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group