Schneeball fliegt nicht richtig

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

BlitzChecker

Betreff: Schneeball fliegt nicht richtig

BeitragSa, März 04, 2006 14:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!
Ich bin dabei ein Game zu proggen, allerdings hab ich ein Problem:
Ich will machen, das wenn man die linke Maustaste drückt, ein Schneeball geradeaus fliegt. Allerdings fliegt er immer sehr stark zu seite. Ich denke, es ist ein Rundungsfehler. Aber ich hab ihn noch nicht gefunden. Hier mal die entscheidenden Code-Stücke:

Schneebälle positionieren:
Code: [AUSKLAPPEN]
   For schneeball.schneebaelle = Each schneebaelle
      id = schneeball\id
      x_s = schneeball\x
      y_s = schneeball\y
      z_s = schneeball\z
      status = schneeball\status
      PositionEntity id,x_s,y_s,z_s
      status = status + 1
      If status = 180 Then status = 1
      schneeball\status = status/2
      RotateEntity id,schneeball\pitch#,schneeball\yaw#,schneeball\roll#
      MoveEntity id,1,Sin(status),1
      schneeball\x=EntityX(id)
      schneeball\y=EntityY(id)
      schneeball\z=EntityZ(id)
   Next


Neuen Schneeball erzeugen:
Code: [AUSKLAPPEN]
   If MouseHit(1) Then
      schneeball.schneebaelle = New schneebaelle
      schneeball\id = CopyEntity(snowball_roh)
      temp_x = EntityX(camera)
      temp_z = EntityZ(camera)
      schneeball\x = temp_x
      schneeball\z = temp_z
      schneeball\y = EntityY(camera)
      schneeball\status = 1
      schneeball\pitch# = EntityPitch(camera)
      schneeball\yaw# = EntityYaw(camera)
      schneeball\roll# = EntityRoll(camera)
   EndIf


Ich hoffe ihr könnt mir helfen!

mfg BlitzChecker
www.xairro.com

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, März 04, 2006 14:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Was hat den Sin in einer Flugbahn zu suchen? Ein Flugkörper der ohne eigenen Antrieb durch die Luft fliegt ist allein den Naturgesetzen ausgeliefert und die währen... Gravitation und Luftwiederstand... Wenn man es dann auch noch etwas realistischer machen will, kann man noch ein Drehimpuls mit einbeziehen der die Luft so 'umwältzt' das ein Flugkörper einen leichten Bogen fliegt (wie es beim Fussball oder Tischtennis angewandt wird)...

Du benötigst also nur jeweils eine X,Y,Z Positionskoordinate und jeweils eine X,Y,Z Bewegungskoordinate... Die Position wird von der Bewegung beeinflusst... Zusätzlich addierst oder subtraiertst du der Y-Bewegungsvariable eine Gravitation hinzu... Bei einem neuem Wurf wird ein ein Schneball an der Position des werfenden erstellt und die Beweghungsrichtung und Stärke den Bewegungsvariablen zugeteilt (Stossimpuls). den Rest sollten die restlichen Berechnungen wie oben genannt dann machen... Fertig...
 

HW

BeitragSa, März 04, 2006 15:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich verstehe eigentlich nicht, wozu du im Type die Koordinaten des Schneeballs angegeben hast. Schließlich sind die Koordinaten bereits in der Entity gespeichert. Du müsstest nur beim Erstellen des Schneeballs diesen an die richtige Stelle setzen sowie entsprechend rotieren und dann in der Hauptschleife diesen nach vorne zu bewegen.

BlitzChecker

BeitragSa, März 04, 2006 15:15
Antworten mit Zitat
Benutzer-Profile anzeigen
oh... Embarassed

stimmt...
das mit dem sin war nur vorrübergehend so. nur damit das wenigstens ein bisschen "real" aussieht und damit er auch mal auf den bode kommt.
aber das mit der physik des schneeballs hab ich noch nicht so ganz verstanden. wie kann ich denn am besten die gravitation erzeugen?

mfg BlitzChecker
www.xairro.com

5k41

BeitragSa, März 04, 2006 15:23
Antworten mit Zitat
Benutzer-Profile anzeigen
sry vielleicht hab ich das falsch verstanden aber ich denke mal:
Code: [AUSKLAPPEN]

moveentity schneeball,0,-gravity,0
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image
 

HW

BeitragSa, März 04, 2006 15:33
Antworten mit Zitat
Benutzer-Profile anzeigen
So müsste das aussehen. Wer es noch realer machen will, benutzt Folgendes:
Code: [AUSKLAPPEN]
MoveEntity schneeball,0,-(gravity*mass),ZSpeed

Dann ist gravity eine globale Konstante, während mass ein Typefield ist.

BlitzChecker

BeitragSa, März 04, 2006 15:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Mein eigentliches Problem war (und ist) ja:
der Ball fliegt nicht gerade, sonder zu weit nach rechts. Manchmal fliegt er auch ganz nach hinten.
www.xairro.com

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, März 04, 2006 15:44
Antworten mit Zitat
Benutzer-Profile anzeigen
@5k41, der Ansatz ist schon ok, nur das Problem das die Gravitation nicht verstärkt wird, ausser wenn die Gravitationsvariable während der Laufzeit verändert wird...

@BlitzChecker, da ich nun nicht soviel Lust habe wieder einen neuen Code zu schreiben und auch kaum noch Zeit habe, gebe ich dir mal ein anderen alten Beispielcode den man nur ein wenig Umreiben müsste...Code: [AUSKLAPPEN]
Graphics3D 640,480,32,2
SetBuffer BackBuffer()

xp#=10;X-Geschwindigkeit
yp#=10;Y-Geschwindigkeit
zp#=20;Z-Geschwindigkeit
xg#=0;X-Position
yg#=0;Y-Position
zg#=0;Z-Position

camera=CreateCamera()
light=CreateLight()
cube=CreateCube()

PositionEntity camera,0,8,0
PositionEntity cube,x,y,z
TurnEntity light,70,0,0


;Hauptschleife
While Not KeyHit(1)
 If KeyDown(203) Then xg=xg-0.02
 If KeyDown(205) Then xg=xg+0.02
 If KeyDown(200) Then zg=zg+0.02
 If KeyDown(208) Then zg=zg-0.02
 If KeyDown(57) And yp=0 Then yg=.5

 ;Berechnung des 'Luftwiederstandes'
 xg=xg/1.02
 yg=yg/1.02
 zg=zg/1.02

 ;Anwendung der Gravitation
 yg=yg-0.01

 ;Anwendung der Geschwindigkeit an die Positionen
 xp=xp+xg
 yp=yp+yg
 zp=zp+zg

 ;Ganz billige Bodenabfrage
 If yp<0 Then yp=0:yg=-yg/2

 PositionEntity cube,xp,yp,zp
 RenderWorld
 Flip
Wend
End


/EDIT: @BlitzChecker, du musst beim Wurf die Richtung mit Sin/Cos ausrechnen. Du hast bei deinem ersten Post das Sin in der Bewegungsroutine mit drin, da soll es eben nicht rein. Beim erzeugen bzw. Wurf ist es ja was anderes...
  • Zuletzt bearbeitet von hectic am Sa, März 04, 2006 15:47, insgesamt einmal bearbeitet
 

HW

BeitragSa, März 04, 2006 15:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Also das Problem, dass er nach rechts fliegt, ist ohne Weiteres zu erkennen:
Code: [AUSKLAPPEN]
MoveEntity id,1,Sin(status),1

So sieht es jetzt im Moment bei dir aus, schätze ich. Aber die erste 1 ist doch eigentlich unnötig. Wenn du ihn entlang der X-Achse mit einem positiven Wert bewegst, dann bewegst du ihn nach rechts. So einfach ist das. Wink
Dass er nach hinten fliegt, kann ich mir nicht erklären. Confused Du hast da doch keine Variable in der Z Achsenbewegung. Daher könnte eine negative Bewegung entlang dieser Achse gar nicht möglich sein. Es könnte aber etwas mit dem PositionEntity zu tun haben. Ich jedenfalls hätte PositionEntity nicht in die Hauptschleife genommen. Zur Entfernung von PositionEntity siehe oben.

BlitzChecker

BeitragSa, März 04, 2006 15:53
Antworten mit Zitat
Benutzer-Profile anzeigen
danke, jetzt gehts! Very Happy
www.xairro.com
 

Dreamora

BeitragSa, März 04, 2006 15:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Gravitation auf MoveEntity auszuführen ist übrigens falsch. Dies wirkt sich auf das lokale Koordinatensystem aus, nicht auf die Weltachsen.

Insofern müsste man TranslateEntity oder PositionEntity verwenden.

Da für eine Gravitation jedoch eh Position und Geschwindigkeit und Beschleunigung nötig sind, wird wohl PositionEntity fast einfacher sein (New Position = Old Position + Geschwindigkeit, New Geschwindigkeit = Old Geschwindigkeit + Beschleunigung. Letzteres wären dann Graviation und Reibung im vorliegenden Falle, wobei Reibung durch ein einfaches Reibung = -0.03 * Geschwindigkeit zu erreichen ist)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, März 04, 2006 16:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt ja... Division braucht mehr Taktzyklen als eine Multiplikation...
Code: [AUSKLAPPEN]
 xg=xg/1.02
 yg=yg/1.02
 zg=zg/1.02

kann durch Code: [AUSKLAPPEN]
 xg=xg*.98
 yg=yg*.98
 zg=zg*.98

ersetzt werden...

BlitzChecker

BeitragSa, März 04, 2006 16:32
Antworten mit Zitat
Benutzer-Profile anzeigen
hm, ich hab ein neues problem:
user posted image

machmal starten die schneebälle wer weiss wo. aber nur manchmal.
Code: [AUSKLAPPEN]
   For schneeball.schneebaelle = Each schneebaelle
      id = schneeball\id
      MoveEntity id,0,0,1
      RotateEntity id,schneeball\pitch#,schneeball\yaw#,schneeball\roll#
   Next

Code: [AUSKLAPPEN]
   If MouseHit(1) Then
      schneeball.schneebaelle = New schneebaelle
      temp = CopyEntity(snowball_roh)
      schneeball\id = temp
      schneeball\pitch# = EntityPitch(camera)
      schneeball\yaw# = EntityYaw(camera)
      schneeball\roll# = EntityRoll(camera)
      PositionEntity temp,EntityX(camera),EntityY(camera),EntityZ(camera)
   EndIf
www.xairro.com
 

ke^kx

BeitragSa, März 04, 2006 18:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Nur so nebenbei: Die masse hat generell nichts mit der Geschwindigkeit zu tun, mit der ein Körper nach unten fällt, entscheident ist der Luftwiederstand.

Jiriki
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM
 

Dreamora

BeitragSa, März 04, 2006 19:06
Antworten mit Zitat
Benutzer-Profile anzeigen
falsch.

Beschleunigung = Kraft / Masse wenn mans reibungsfrei macht.

Aber normalerweise setzt man die Gravitation als Konstante, womit das Gewicht nicht zum tragen kommt.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

ke^kx

BeitragSa, März 04, 2006 19:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, sry. Ich mein natürlich nur bei der Gravitation. Ist villeicht etwas unklar ausgedrückt.

Jiriki
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM

BlitzChecker

BeitragSo, März 05, 2006 15:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Weiss denn keiner, warum die Schneebälle an der falschen Stelle losfliegen? Crying or Very sad
www.xairro.com

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group