BallSpiel Problem
Übersicht

KevinBetreff: BallSpiel Problem |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wie der Titel schon sagt, ich habe ein Problem.
Undzwar bastel ich grade an einem "BallSpiel" (Ja ich weiß ist zwar bescheuert aber zeitverteib.) Ich habe schon den anderen Thread durchgelesen aber da wollte ich nicht mehr Posten. Mein Problem ist ich habe einen Ball und der hat zwar Kollisionen, aber geht einfach Durch die Map durch! Code: [AUSKLAPPEN] Graphics3D 1366,768,32,1
SetBuffer BackBuffer() ;Name des Progs AppTitle "BallSpiel" Cls Parcour=LoadMesh("map.3ds") EntityType Parcour, 1 ;objekt = LoadMesh("ball.3ds") objekt = CreateSphere (16) EntityType objekt, 2 PositionEntity Objekt, 0,100,0 ;Kollis Collisions 1, 2, 2, 3 Kamera = CreateCamera(objekt) PositionEntity Kamera, 65.985,226.5,0.949 RotateEntity Kamera, 90,0,0 While Not KeyHit (1) ;Ball Kord/Kollis MoveEntity objekt, 0,-50,0 RenderWorld UpdateWorld Flip Wend End Wenn ich jetzt aber es so schreibe : Code: [AUSKLAPPEN] ;Kollis
Collisions 2, 1, 2, 3 dann kollidiert der Ball aber unter der Map ,warum geht es nicht andersherum? |
||
- Zuletzt bearbeitet von Kevin am So, März 06, 2011 16:49, insgesamt einmal bearbeitet
![]() |
count-doku |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
also Code: [AUSKLAPPEN] Collisions 2,1,2,3
ist richtig, da das bewegte Objekt vorne sein muss. Und das er darunter hängt liegt einfach daran, dass du RenderWorld ![]() ![]() falschrum drin hast. mfg, count-doku |
||
Kevin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Thx | ||
Kevin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
ich habe mal wieder ein problem mit dem Ball Spiel. Da der Ball rotiert kann ich die Kamera nicht an den Ball hängen,dafür habe ich einen cube erstellt der die gleichen koordinaten hat wie der Ball, aber ich habe ihn nicht angehangen da er sich ja sonst auch mitdrehen würde! Er übernimt die x,y,z koordinaten des Balles (Objekt) Hier mein Code: [AUSKLAPPEN] Graphics3D 1366,768,32,1 SetBuffer BackBuffer() ;Name des Progs AppTitle "BallSpiel" Cls objekt = LoadMesh("ball.3ds") EntityType objekt, 2 PositionEntity Objekt, 0,100,0 Local ball_x# = EntityX# (Objekt) Local ball_y# = EntityY# (Objekt) Local ball_z# = EntityZ# (Objekt) camo = CreateCube () PositionEntity camo, ball_x,ball_y,ball_z Kamera = CreateCamera(camo) PositionEntity Kamera, 65.985,226.5,0.949 RotateEntity Kamera, 90,0,0 While Not KeyHit (1) ;...bla...blaaaaaa!!! UpdateWorld RenderWorld Flip Wend End |
||
![]() |
das wurgel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du hast garnicht dazugesagt, wo jetzt das Problem bei deinem Code auftritt und die Hauptschleife hast du weggelassen!
Was ich dir empfehlen kann ist, den Cube wegzulassen und einen Pivot zu erstellen (CreatePivot ![]() |
||
1 ist ungefähr 3 |
Kevin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das Problem ist: wenn sich der Ball Rotiert, rotiert sich die Kamera mit!
Und ich Kapiere die Pivots nicht! Bitte um Hilfe |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja ,das ist logisch: Du hast die Camera als "Child" des 3D-Objects erschaffen. Wenn sich das Objekt dreht, dann immer mit all seinen Kindern.
Ein... BlitzBasic: [AUSKLAPPEN] Kamera = CreateCamera() ...(ohne etwas in der Klammer) erstellt eine Kamera, die eigenständig ist. Wie willst Du denn den Zusammenhang zwischen Kamera und 3D-Objekt? Ein Pivot ist nichts anderes als eine "Mutter" für andere Objekte. z.b. so könnten Kamera und 3D-Objekt eine gemeinsame Mutter haben, die durch den Raum gleitet. Das sieht dann so aus, als ob die Kamera immer hinter dem 3D Objekt hinterher wäre. Wenn aber nun das 3D-Objekt rotiert, dann rotiert diesmal die Kamera nicht mit: BlitzBasic: [AUSKLAPPEN] Mutter=CreatePivot() |
||
Kevin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also wenn ich den Code von Midimaster benutze, Bewegt sich die Kamera aber nicht der Ball!
Code: [AUSKLAPPEN] Graphics3D 1366,768,32,1
SetBuffer BackBuffer() ;Name des Progs AppTitle "BallSpiel" Cls Parcour=LoadMesh("map.3ds") EntityType Parcour, 1 objekt = LoadMesh("ball.3ds") EntityType objekt, 2 PositionEntity Objekt, 0,100,0 ;Kollis Collisions 2, 1, 2, 3 ;Kamera = CreateCamera() Mutter=CreatePivot() Kamera=CreateCamera(Mutter) Objekt=CreateSphere (16,Mutter) PositionEntity Kamera, 0,856.5,0 RotateEntity Kamera, 90,0,0 licht = CreateLight (2 ,Objekt) lichtmap = CreateLight (1 ,Parcour) Local speed# Local lenkung# Local camx# While Not KeyHit (1) ;Ball Kord/Kollis MoveEntity objekt, lenkung,-50,speed TurnEntity objekt, speed, 0,0,+1 ;TurnEntity kamera, -speed,0,0 MoveEntity kamera, lenkung,camx,0 If KeyDown (200) Then speed=speed-0.04 ElseIf KeyDown (208) Then speed=speed+0.04 ElseIf KeyDown (203) Then lenkung=lenkung-0.01 ElseIf KeyDown (205) Then lenkung=lenkung+0.01 EndIf ;If EntityPitch(kamera) <> 0 Or EntityYaw(kamera)<> 0 Or EntityRoll (kamera) <> 0 Then ; EntityPitch (kamera) = 0 ; EntityYaw (kamera) = 0 ; EntityRoll (kamera) = 0 ;EndIf UpdateWorld RenderWorld Flip Wend End |
||
![]() |
biggicekey |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dann bewege den Ball statt der Kamera! Oder aber den Pivot "Mutter", dann bewegen sich sowohl Kamera als auch Ball. Das Programm macht, was du ihm sagst. Streng dich mal ein wenig an und teste erstmal durch was passiert wenn du welches Objekt drehst. Du hast ja nur 3 zur Auswahl. Dann lernst du schnell was Pivot bedeutet. | ||
#45 www.icekeyunlimited.de www.starcrusade.de
Gewinner BCC#17 !!! mit dotkiller Nothing more to register - you've cleaned us out![/size] |
Kevin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wenn ich den Code: [AUSKLAPPEN] Graphics3D 1366,768,32,1
SetBuffer BackBuffer() ;Name des Progs AppTitle "BallSpiel" Cls Parcour=LoadMesh("map.3ds") EntityType Parcour, 1 objekt = LoadMesh("ball.3ds") EntityType objekt, 2 PositionEntity Objekt, 0,100,0 ;Kollis Collisions 2, 1, 2, 3 ;Kamera = CreateCamera() Mutter=CreatePivot() Kamera=CreateCamera(Mutter) Objekt=CreateSphere (16,Mutter) PositionEntity Kamera, 0,856.5 ,200 RotateEntity Kamera, 90,0,0 licht = CreateLight (2 ,Objekt) lichtmap = CreateLight (1 ,Parcour) Local speed# Local lenkung# Local camx# Local pfeilspeed# While Not KeyHit (1) ;Ball Kord/Kollis MoveEntity mutter, lenkung,-50,speed TurnEntity mutter, speed, 0,0,+1 ;TurnEntity kamera, -speed,0,0 If KeyDown (200) Then speed=speed-0.04 ElseIf KeyDown (208) Then speed=speed+0.04 ElseIf KeyDown (203) Then lenkung=lenkung-0.01 ElseIf KeyDown (205) Then lenkung=lenkung+0.01 EndIf ;If EntityPitch(kamera) <> 0 Or EntityYaw(kamera)<> 0 Or EntityRoll (kamera) <> 0 Then ; EntityPitch (kamera) = 0 ; EntityYaw (kamera) = 0 ; EntityRoll (kamera) = 0 ;EndIf UpdateWorld RenderWorld Flip Wend End Benutze gehen die Kollisionen nicht! |
||
![]() |
Johannes´ |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es kann nicht funktionieren, da du in objekt erst einen Ball lädst, dem du den Typ 2 gibst, dann aber in objekt eine Kugel erstellst, die dann letzlich der Spielball ist, aber keinen Typ hat. Dieser erstellte Ball wird dann ja auch an Mutter angehängt.
Außerdem wird ja Mutter bewegt und kann sowieso ungehindert durch die Karte fallen. |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
also....
um eine Fehler zu finden, brauchst Du zunächst einmal ein Bild, auf dem überhaupt etwas zu sehen ist. Außerdem rate ich dir dringend zu... BlitzBasic: [AUSKLAPPEN] Graphics3D 800,600,32,2 ...während der Testphase, damit Du den Debugger siehts Dann rate ich immer zunächst eine Kamera von außen zu benutzen, damit man überhaupt einmal sieht, wie die Objekte zueinanderstehen. Nächster Tipp: Bewege deine Objekte nicht gleich mit so "rasenden" Geschwindigkeiten, sondern erst mal nur mit 1/10 des geplanten, damit du siehts, wohin sie sich bewegen. Verwende statt 3D-Maps und 3D-Meshes einfache Formen wie Plane() oder Sphere(). Deine Kollision funktioniert übrigens: massiv veränderte Start-Werte: BlitzBasic: [AUSKLAPPEN] Graphics3D 800,600,32,2 Mit dem Code siehst Du schon mal den Ball auf eine Wiese fallen. II. Dein Code Nun wolltest Du ja, dass die Kamera so über dem Ball steht und dann senkrecht nach unten schaut, oder? Deine Zeile...BlitzBasic: [AUSKLAPPEN] PositionEntity Kamera, 0,856.5 ,200...bringt aber die Kamera ganz schön weit Richtung Y und Z von dem Ball weg. Probiers mal mit Z=0 und mit Y=50. Und bewege dann den Ball unter die Kamera: Die Zeilen, die Objekt betreffen müssen natürlich alle unterhalb der Mutter=CreatePivot() stehen: BlitzBasic: [AUSKLAPPEN] Mutter=CreatePivot() Nun wir es etwas unklar in Deinem Code. Ich vermute mal, der Ball soll fallen, die Kamera aber immer über ihm schweben? Also muss in der REPEAT/UNTIL-Schleife das Objekt fallen! BlitzBasic: [AUSKLAPPEN] While Not KeyHit (1)und das auch noch viel langsamer als Du denkst. Und die Mutter bewegt sich und dreht sich. Hier mal alle meine Gedanken auf einem Haufen: BlitzBasic: [AUSKLAPPEN] Graphics3D 800,600,32,2 |
||
Kevin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also der Code klappt wunderbar, aber die Kamera bewegt sich langsamer wie der Ball, also sehr Merkwürdig!
Code: [AUSKLAPPEN] Graphics3D 800,600,32,2
SetBuffer BackBuffer() ;Name des Progs AppTitle "BallSpiel" Cls Parcour=LoadMesh("map.3ds") EntityType Parcour, 1 ;Kollis Collisions 2, 1, 2, 3 ;Kamera = CreateCamera() Mutter=CreatePivot() Kamera=CreateCamera(Mutter) PositionEntity Kamera, 0,150,0 RotateEntity Kamera, 90,0,0 objekt = LoadMesh("ball.3ds",mutter) ;Objekt=CreateSphere (16,Mutter) EntityType objekt, 2 PositionEntity Objekt, 0,40,0 licht = CreateLight (2 ,Objekt) lichtmap = CreateLight (1 ,Parcour) Local speed# Local lenkung# While Not KeyHit (1) ;Ball Kord/Kollis MoveEntity Objekt, 0,-0.5,0 MoveEntity Mutter, 0,0,-speed TurnEntity objekt, speed, 0,0,+1 TurnEntity Mutter, 0,-lenkung,0 If KeyDown (200) Then speed=speed-0.04 ElseIf KeyDown (208) Then speed=speed+0.04 ElseIf KeyDown (203) Then lenkung=lenkung-0.01 ElseIf KeyDown (205) Then lenkung=lenkung+0.01 EndIf UpdateWorld RenderWorld Flip Wend End ;~IDEal Editor Parameters: ;~C#Blitz3D |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
das hängt mit deinem...BlitzBasic: [AUSKLAPPEN] TurnEntity objekt, speed, 0,0,+1...zusammen. Warum schreibst Du das rein? Was willst Du damit bezwecken? |
||
Kevin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Aber wenn ich das Rauswerfe, Rotiert sich der Ball ja nicht, aber wie löse ich dass dann am besten? | ||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Problem ist, wenn der Ball in sich rotiert, dann ändert er auch sein Koordinatensystem. Bisher zeigt seine Y-Achse genauso nach unten wie die Y-Achse der "Mutter" oder der ganzen Welt. drehst Du ihn aber um die X-Achse, dann dreht sich auch das ganze Koordinaten-System um diese X-Achse. Eine anschließende Bewegung in Y-Richtung wird dann in die neue Y-Richtung ausgeführt. Also nicht mehr nach unten, sondern möglicherweise nach hinten.
Als Lösungen sind zwei Ansätze denkbar: 1. Translate Wenn du den Ball mal gedreht hast, scheidet MoveEntity als Bewegungsbefehl aus, denn das verwendet das "innere" Kordinatensystem des Balls. Dafür verwendest Du jetzt besser TranslateEntity. Dieser Befehl richtet sich immer nach der Ausrichtung des Mutterobjektes. Also zeigt Y immer nach unten. 2. noch ein weiteres Pivot Der Ball wird in ein weiteres Pivot "Achse" verpackt. Dessen Mutter ist "Mutter" und der Ball wird Child von "Achse". Jetzt kannst Du "Achse" mit MoveEntity fallen lassen und den Ball als Child davon beliebig drehen. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group