Probleme mit Kollision und Bewegung von Obj.

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Kaplan

Betreff: Probleme mit Kollision und Bewegung von Obj.

BeitragMi, März 22, 2006 17:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Leute!
Ich hab da ein paar Probleme. Ich versuche gerade ein Ballspiel zu coden(Ball durch Dungeon etc.). Nur passieren ein paar mysteriöse Dinge...Ne spaß bei Seite. Ich Paste mal den Code und schreibe weiter unten, was mein Problem ist.
Code: [AUSKLAPPEN]

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

player=CreatePivot()
cam = CreateCamera(player)
ball = CreateSphere(5,player)

boden = CreatePlane()
cube=CreateCube()

sun=CreateLight()
RotateEntity sun,50,35,40

rot = LoadTexture("rot.bmp")
grün = LoadTexture("grün.bmp")

PositionEntity cube, 10,1,10

EntityTexture cube,grün

XGes# = 0
ZGes# = 0
EntityType ball,1
EntityRadius ball,1
PositionEntity boden,0,-10,0
PositionEntity cam,0,10,-10
TurnEntity cam,20,0,0
PositionEntity ball,0,0,0
EntityTexture boden,rot
EntityTexture ball,grün


Repeat
   
   MoveEntity player,XGes,0,ZGes
   TurnEntity ball,ZGes,0,XGes
   

   If KeyDown(17) = 1 Then
      If ZGes# <= 0.5 Then
         ZGes# = ZGes# + 0.1
      End If
   End If
   If KeyDown(31) = 1 Then
      If ZGes# >= -0.5 Then
         ZGes# = ZGes# - 0.1
      End If
   End If
   If KeyDown(17) = 0 Then
      If ZGes# > 0 Then
         ZGes# = ZGes# - 0.1
      End If
   End If
   If KeyDown(31) = 0 Then
      If ZGes# < 0 Then
         ZGes# = ZGes# + 0.1
      End If
   End If
   If KeyDown(32) = 1 Then
      If XGes# <= 0.5 Then
         XGes# = XGes# + 0.1
      End If
   End If
   If KeyDown(30) = 1 Then
      If XGes# >= 0.5 Then
         XGes# = XGes# - 0.1
      End If
   End If
   If KeyDown(32) = 0
      If XGes# > 0 Then
         XGes# = XGes# - 0.1
      End If
   End If
   If KeyDown(30) = 0.0 Then
      If XGes# < 0 Then
         XGes# = XGes# + 0.1
      End If
   End If
   Collisions 1,2,2,2
   UpdateWorld
   RenderWorld
   Flip
Until KeyHit(1)
End

Also mein erstes Problem:
Das mit der Kollision funzt net o.O. Ich weiß, TOTAL FALSCH, aber ich schnall es durch die OH irrgendwie net o.O Kann es mir einer korrigieren, damit es der liebe Kaplan versteht? Wäre sehr nice(bin kein Copy/Past Typ).
Mein zweites Problem:
Lasst doch mal bitte das kleine Programmchen laufen. Wenn ihr jetzt W/D/S/A drückt, bewegt sich die kleine Sphere. Da sich die Kamera mitbewegt, ist da noch eine kleine Box, damit man weiß, ob sich die Sphere wirklich bewegt. Wenn wir jetzt aber A drücken, bewegt sich die Sphere langsamer als wenn wir W/D/S drücken. Ich hab schon ein wenig rumprobiert und...Keine Ahnung. Ich glaube aber es ist ein dummer Noob-Fehler.

Hmm, ich denke das wars vorerst.
Ich hoffe ihr versteht was ich meine.
Das mit den Kollisionen versteh ich aber wirklich nicht...Irrgendwie EntityType einstellen, dann den EntityRadius. Bis hier hin versteh ich es noch. Aber das mit dem Collisions versteh ich null(ich habs mal aus einem Beispiel in der OH kopiert um damit rumzuexperementieren (<-- richtig geschrieben?), es hat aber garnicht geklappt, also war das rumexperementieren futsch.). Mit 2D ist es ja ziemlich einfach(ImagesCollide etc.).

Hoffe ich könnt mir helfen.

Mit freundlichen Grüßen,
Kaplan.
"Jedes Ereigniss hinterlässt eine Narbe in der Seele des Beteiligten. Manche sind größer als andere, manche aber teilen deine Seele in Zwei."


User posted image
User posted image
 

Castrapolis

BeitragMi, März 22, 2006 21:35
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Damit die Kollision funktioniert musst du der Box auch einen Code: [AUSKLAPPEN]
EntityType

zuweisen.

2. - Du hast bei der Abfrage der "a"-Taste ein - vor 0.5 vergessen.
- Wenn du dir einmal mit Text XGes# und ZGes#
anzeigen lässt, stellst du fest, dass beide nach einer Bewegung nicht
mehr 0 werden, sondern 1.49012e-008. Um dass zu vermeiden würde
ich zunächst mit Integern rechnen und dann Code: [AUSKLAPPEN]
MoveEntity player,(XGes/10.0),0,(ZGes/10.0)
schreiben.

So sollte es funktionieren:
Code: [AUSKLAPPEN]
Graphics3D 640,480,24,2
SetBuffer BackBuffer()

player=CreatePivot()
cam = CreateCamera(player)
ball = CreateSphere(5,player)

boden = CreatePlane()
cube=CreateCube()

sun=CreateLight()
RotateEntity sun,50,35,40

rot = LoadTexture("rot.bmp")
grün = LoadTexture("grün.bmp")

PositionEntity cube, 10,1,10

EntityTexture cube,grün

XGes = 0
ZGes = 0
EntityType cube,2
EntityType player,1
EntityRadius player,1
PositionEntity boden,0,-10,0
PositionEntity cam,0,10,-10
TurnEntity cam,20,0,0
PositionEntity ball,0,0,0
EntityTexture boden,rot
EntityTexture ball,grün


Repeat
   Cls
   MoveEntity player,(XGes/10.0),0,(ZGes/10.0)
    If EntityCollided(player,2)= 0 Then TurnEntity ball,ZGes,0,XGes; Damit sich
    ;der Ball bei einer Kollision nicht weiterdreht.
   
   If KeyDown(17) = 1 Then
      If ZGes <= 5 Then
         ZGes = ZGes + 1
      End If
   End If
   If KeyDown(31) = 1 Then
      If ZGes >= -5 Then
         ZGes = ZGes - 1
      End If
   End If
   If KeyDown(17) = 0 Then
      If ZGes > 0 Then
         ZGes = ZGes - 1
      End If
   End If
   If KeyDown(31) = 0 Then
      If ZGes < 0 Then
         ZGes = ZGes +1
      End If
   End If
   If KeyDown(32) = 1 Then
      If XGes <= 5 Then
         XGes = XGes + 1
      End If
   End If
   If KeyDown(30) = 1 Then
      If XGes >= -5 Then
         XGes = XGes - 1
      End If
   End If
   If KeyDown(32) = 0
      If XGes > 0 Then
         XGes = XGes - 1
      End If
   End If
   If KeyDown(30) = 0 Then
      If XGes < 0 Then
         XGes = XGes + 1
      End If
   End If
   Collisions 1,2,2,2
   UpdateWorld
   RenderWorld
    Text 10, 10, ZGes
    Text 10, 30, XGes
   Flip
Until KeyHit(1)
End

Gruß Castrapolis
 

Kaplan

BeitragMi, März 22, 2006 22:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Castrapolis hat Folgendes geschrieben:
1. Damit die Kollision funktioniert musst du der Box auch einen Code: [AUSKLAPPEN]
EntityType

zuweisen.

Achso daran lags...Danke das merk ich mir.
Castrapolis hat Folgendes geschrieben:

2. - Du hast bei der Abfrage der "a"-Taste ein - vor 0.5 vergessen.
- Wenn du dir einmal mit Text XGes# und ZGes#
anzeigen lässt, stellst du fest, dass beide nach einer Bewegung nicht
mehr 0 werden, sondern 1.49012e-008. Um dass zu vermeiden würde
ich zunächst mit Integern rechnen und dann Code: [AUSKLAPPEN]
MoveEntity player,(XGes/10.0),0,(ZGes/10.0)
schreiben.

Jap hab ich auch gesehn. Danke für die Hilfe!
Es funzt jetzt(Hab mir deinen editierten Code auch mal angesehn. Glaube habe paar kleinigkeiten auch vergessen wie Cls...)

Ich danke dir für deine Hilfe!

Mit freundlichen Grüßen,
Kaplan.
"Jedes Ereigniss hinterlässt eine Narbe in der Seele des Beteiligten. Manche sind größer als andere, manche aber teilen deine Seele in Zwei."


User posted image
User posted image

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group