Problem mit Kollision und Schwerkraft

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

Holzchopf

Meisterpacker

BeitragSo, Dez 20, 2009 13:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Pac-Man

darf ich dich bitten, in Zukunft nicht mehr ganze Beiträge zu zitieren (besonders, wenn es gerade der vorangehende ist)?

Danke für deine Aufmerksamkeit und einen schönen vierten Advent wünsch ich noch! =)

mfG
Holzchopf
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

PacMani

BeitragSo, Dez 20, 2009 14:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab sie nun rausgenommen Wink
 

Kruemelator

BeitragSo, Dez 20, 2009 15:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Es nicht viel komplizierter das Level in "steil" und "flach" zu unterteilen. Dann hast du für einen Hügel zwar zwei Objekte, aber außer sie auf der selben Stellle zu platzieren musst du da nix beachten.
Hier mal ein Beispiel wie ich es gelöst hätte:
Beachte was in der Hauptschleife unter Schwerkraft steht, ist wesendlich kürzer als bei dir.
Code: [AUSKLAPPEN]
;Variablen--------------------------------
Global xfenster = 800
Global yfenster = 600
Global farbtiefe = 16
Global windowmod = 2

Global mxs#
Global mys#
Global mzs#

;3D Welt----------------------------------
Graphics3D xfenster,yfenster,farbtiefe,windowmod
SetBuffer BackBuffer()
WireFrame 0
ClsColor 255,255,255
Color 0,0,0

;Kamera und Licht
Global camera=CreateCamera()
CameraRange camera,0.001,100
CameraClsColor camera,255,255,255
PositionEntity camera,0,-5,-15
light = CreateLight()



;Objekte----------------------------------


Const spielfigur = 1
Const landschaftsteil = 2
Const landschaftflach = 3

;Spielfigur
spieler = CreateSphere()
EntityColor spieler,150,0,0
EntityType spieler,spielfigur
PositionEntity spieler,0,5,0

;Levelteil der steil ist
level1 = CreateCube()
EntityColor level1,0,150,0
ScaleEntity level1,3,1,1
PositionEntity level1,0,-4,0
RotateEntity level1,0,0,60
EntityType level1,landschaftsteil

;Levelteil der flach ist
level2 = CreateCube()
EntityColor level2,0,150,0
ScaleEntity level2,3,1,1
PositionEntity level2,0,-4,0
RotateEntity level2,0,0,20
PositionEntity level2,-2,-6,0
EntityType level2,landschaftflach

;unterschiedliche Kolisions der Levelteile
Collisions(spielfigur,landschaftsteil,2,2)
Collisions(spielfigur,landschaftflach,2,3)


;Werte------------------------------------
;Schwerkraftswert: je höher desto stärker
Global gravity# = 0.001


;Ende-------------------------------------
Color 255,255,255
Print "Taste drücken"
Color 0,0,0
WaitKey()
fpsrate = CreateTimer(60)
While Not KeyHit(1)
   WaitTimer(fpsrate)
   Cls
   mxs# = MouseXSpeed()
   mys# = MouseYSpeed()
   mzs# = MouseZSpeed()
   
   
   ;Schwerkraft
   ymove# = ymove# - gravity#
   TranslateEntity spieler,0,ymove#,0
   UpdateWorld
   If EntityCollided(spieler,landschaftflach) Then ymove# = 0
   
   cammove()
   RenderWorld
   Text 10,10,"Mit Leertaste Spieler wieder zurücksetzen"
   Text 10,20,"Mit ESC beenden"
   
   ;Spieler zurücksetzen
   If KeyHit(57) Then
      PositionEntity spieler,0,5,0
      ymove# = 0
   EndIf
   
   
   Flip 0
Wend
End



;Funktionen-------------------------------


Function cammove()
   TurnEntity camera,mys#/20,mxs#/-20,0
   RotateEntity camera,EntityPitch(camera),EntityYaw(camera),0
   MoveMouse 400,300
   If KeyDown(17) Then MoveEntity camera,0,0,0.1
   If KeyDown(31) Then MoveEntity camera,0,0,-0.1
   If KeyDown(30) Then MoveEntity camera,-0.1,0,0
   If KeyDown(32) Then MoveEntity camera,0.1,0,0
   TranslateEntity camera,0,mzs#/2,0
End Function

Schau es dir mal an, vielleicht hilft es dir.
 

PacMani

BeitragSo, Dez 20, 2009 16:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, werde ich bestimmt nochmal zu rate ziehen, wenn holzchopfs Lösung nicht dauerhaft praktisch anzuwenden ist: Wir haben im Chat folgendes herausgearbeitet:
Code: [AUSKLAPPEN]
If CountCollisions(Player) > 0
      If CollisionNY(Player, 1) < 0.70
         ClearCollisions
         Collisions PlayerCollisions, LevelCollisions, ToPolygon, SlidingFull
      Else
         Gravity# = 0
         ClearCollisions
         Collisions PlayerCollisions, LevelCollisions, ToPolygon, SlidingPrevent
      EndIf
   End If

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group