Werfen mit Wurfparabel in Blitz3D

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Black Spider

Betreff: Werfen mit Wurfparabel in Blitz3D

BeitragDi, Okt 11, 2005 18:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Leute,
hab n echtes problem was den Code fürs werfen angeht.
Also man hat sein kleines Objekt, was man hält und wenn man die Taste über STRG drückt,
dann soll man es werfen können - funzt nicht.
BlitzBasic: [AUSKLAPPEN]

;--- werfen ---

Function wurf( f.Flint )
If f\status = 1
If f\wurf = 1

s= s + 1
t = s*s
eb = -9.81*t


f\Winkel = 45
f\Beschleunigung = 9
f\X = f\beschleunigung * Cos(f\winkel)
f\Y = f\beschleunigung * Sin(f\winkel)

f\posX = ((f\beschleunigung^2) / eb) Sin(2*(f\winkel))

f\posY = (Tan(f\winkel)) * f\posX - ( eb / (((2*(f\beschleunigung^2)) * Cos^2*(f\winkel))) * f\posX * f\posX)




PositionEntity f\obj,EntityX(f\obj),f\posY,f\posX




End If
End If
f\wurf = 0
f\status = 0
EntityParent f\obj,0
RotateEntity f\obj,0,0,0
ScaleEntity f\obj,7,7,7
EntityType f\obj,type_objekte
End Function

Hab im alten Physikbuch meines Vaters nachgeguckt, und mir den Stoff besorgt den ich brauchte (bin selber erst inner 8. Klasse Rolling Eyes )

für die Physiker unter euch:

f\beschleunigung = V0 (beschleunigung)
f\winkel = winkel alpha
f\X = (V0)x = V0 Cos(alpha)
f\Y = (Vo)y = Vo Sin(alpha)

eb = Erdbeschleunigung = 9.81s²

Bitte Helft mir !!!!
Coming soon:
http://img132.imageshack.us/im...im2ab6.gif
 

BIG BUG

BeitragDi, Okt 11, 2005 20:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Brrr, baue einfach Gravitation in Dein Game ein und schwubbdiewubb hast Du eine physikalisch korrekte Flugbahn. Such mal nach "Sprung" hier im Forum, da sollten genügend Beispielcodes rauskommen.
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)

Black Spider

BeitragMi, Okt 12, 2005 10:52
Antworten mit Zitat
Benutzer-Profile anzeigen
naja, allerdings wollte ich, dass das ding nach der SinusKurve fliegt (und gravitation ist im Game! Komme hier einfach nicht weiter...)

Vll hab ich einfach n Brett vorm Kopf, aber kann man mir trotzdem helfen !?
Coming soon:
http://img132.imageshack.us/im...im2ab6.gif

Markus2

BeitragMi, Okt 12, 2005 12:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Sowas habe ich noch irgendwo auf Platte ,
muß ich mal heute Abend raus suchen Wink

Black Spider

BeitragDo, Okt 13, 2005 15:41
Antworten mit Zitat
Benutzer-Profile anzeigen
jaa, wär cool !
Coming soon:
http://img132.imageshack.us/im...im2ab6.gif

Markus2

BeitragDo, Okt 13, 2005 18:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh,hatte ich schon wieder vergessen Embarassed

BB3D
einfach auf Würfel klicken
Code: [AUSKLAPPEN]

Graphics3D 640,480,16,0
SetBuffer BackBuffer()
AppTitle " Steine werfen"

Global cam=CreateCamera()
CameraRange cam,1,10000
;CameraClsMode cam,0,True

light=CreateLight()

PositionEntity cam,0,0,-50

Global ziel=CreateCube()
EntityColor ziel,255,255,255
ScaleMesh ziel,0.5,0.5,0.5
ScaleMesh ziel,10,10,10
EntityType ziel,2
EntityPickMode ziel,2

Global stein=CreateSphere(8)
ScaleMesh stein,0.5,0.5,0.5
ScaleMesh stein,10,10,10
EntityType stein,1
EntityRadius stein,5
HideEntity stein

Type SteinType

 Field Entity

 Field xs# ;Stein Start
 Field ys#
 Field zs#

 Field xe# ;Ziel position
 Field ye#
 Field ze#

 Field wi# 
 Field ws#
 Field st#
 Field dy#
 Field dz# 
 Field l#   ;Flugbahn länge
 
 Field treffer
 Field count
 Field blow#
 Field sollweg

End Type

Global cStein.SteinType

;-----------------------------------------------------

Collisions 1,2,2,2 ;stein mit ziel als sphere to polygon

;-----------------------------------------------------

While Not KeyHit(1)

 If MouseHit(1) Then
  CameraPick cam,MouseX(),MouseY()
  pe=PickedEntity()
  If pe Then SteinWerfen Rnd(-50,50),EntityY(cam),EntityZ(cam)+20,pe
 EndIf

 If MouseHit(2) Then
  PositionEntity ziel,Rnd(-50,50),Rnd(150,-150),Rnd(50,500)
 EndIf

 SteineUpdaten
 UpdateWorld
 RenderWorld

 Text 0,0,"Maustaste 1 = Werfen , 2 = Ziel bewegen"

 Flip

Wend
End

;-----------------------------------------------------

Function SteinWerfen(xs#,ys#,zs#,ZielEntity)

 Local dx#,dy#,dz#

 cStein=New SteinType

 cStein\Entity=CopyEntity(Stein)
 EntityColor cStein\Entity,Rnd(64,200),Rnd(64,200),Rnd(64,200)
 cStein\wi=-90 ;-90 bis 90 = 180
 cStein\ws=180
 cStein\st=4
 cStein\xs=xs
 cStein\ys=ys
 cStein\zs=zs

 cStein\xe=EntityX(ZielEntity)
 cStein\ye=EntityY(ZielEntity)
 cStein\ze=EntityZ(ZielEntity)

 cStein\dy=0
 cStein\dz=0

 cStein\treffer=False
 cStein\count=100
 cStein\blow=1
 cStein\sollweg=False

 dx=cStein\xe - cStein\xs
 dy=cStein\ye - cStein\ys
 dz=cStein\ze - cStein\zs

 cStein\l=Sqr(dx*dx+dy*dy+dz*dz)* (Pi/(360 / cStein\ws)) ;das sollte die Flugbahnlänge ergeben !?

 PositionEntity cStein\Entity,xs,ys,zs
 PointEntity cStein\Entity,ZielEntity

 ResetEntity cStein\Entity

End Function

;-----------------------------------------------------

Function SteineUpdaten()

 For cStein = Each SteinType
 
  If cStein\treffer=False Then

   Local winkelvonbis#=cStein\ws / cStein\st

   cStein\dy= (-Sin(cStein\wi)*cStein\l) / winkelvonbis/2 ;bei /2 ist z.B. die max. Flughöhe = der Flugbahnlänge zum Ziel /2
   cStein\dz= ( Cos(cStein\wi)*cStein\l) / winkelvonbis

   MoveEntity cStein\Entity,0,cStein\dy,cStein\dz

   If CountCollisions(cStein\Entity)>0 Then cStein\treffer=True
  EndIf

  If cStein\treffer=True Then
    cStein\blow=cStein\blow+0.025
    ScaleEntity cStein\Entity,cStein\blow,cStein\blow,cStein\blow
    cStein\count=cStein\count-1
    If cStein\count<=0 Then cStein\sollweg=True
  Else
   cStein\wi=cStein\wi+cStein\st
   If cStein\wi>90 Then cStein\sollweg=True
  EndIf

  If cStein\sollweg=True Then
   SteinWeg cStein
  EndIf

 Next

End Function

;-----------------------------------------------------

Function SteinWeg(xStein.SteinType)

 FreeEntity xStein\Entity
 Delete xStein

End Function

;-----------------------------------------------------

Function R2#(x#)

 ;Runden

 Return Int(x#*100.0)/100.0

End Function

;-----------------------------------------------------

Black Spider

BeitragFr, Okt 14, 2005 11:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke! Doch bei mir läuft das noch nicht ganz so glat... der Stein verschwindet einfach...
Code: [AUSKLAPPEN]

Global unsichtbaresZielobjekt =CreateCube()
EntityParent unsichtbaresZielobjekt, Piv
PositionEntity unsichtbaresZielobjekt,0,0,90

Type Flint
Field obj
Field status
Field wurf

Field eX, eY, eZ
Field wi, ws, st
Field dy, dz, flugl#

 
End Type

For fs = 0 To 12

Local dx#, dy#, dz#

f.Flint = New Flint
f\obj = CopyEntity(Feuerstein)
f\status = 0
f\wurf = 0


   


f\wi = -90
f\ws = 180
f\st = 4

f\eX = EntityX(unsichtbareszielobjekt)
f\eY = EntityY(unsichtbareszielobjekt)
f\eZ = EntityZ(unsichtbareszielobjekt)


f\dy = 0
f\dz = 0

dx# = f\eX - (EntityX(Piv)-13)
dy# = f\ey - (EntityY(piv)-10)
dz# = f\eZ - (EntityZ(piv)+15)

f\flugl=Sqr(dx*dx+dy*dy+dz*dz)* (Pi/(360 / f\ws))




PositionEntity f\obj,Rnd(4000, 15000),-83,Rnd(1000, 4000)

ResetEntity f\obj


Next


in einer Schleife wird dann das hier abgespielt:
Code: [AUSKLAPPEN]

;--- Wenn der Feuerstein gehalten wird ---
If f\status = 1
If f\wurf = 0
      TurnEntity f\obj,.31,.31,.31
End If
   If KeyHit(42) Then
   f\wurf = 1
   PointEntity f\obj,unsichtbaresZielObjekt
;   wurf(f)
      End If
   
         If MouseHit(2)
         f\status = 0                             
         EntityParent f\obj,0               
         RotateEntity f\obj,0,0,0   
         ScaleEntity f\obj,7,7,7       
         EntityType f\obj,type_objekte   
      EndIf      
End If
   
If Not(EntityCollided(f\obj, type_land)) Then
   If f\Status = 0 Then
      
      s= s + 1
      t = s*s
      eb = -9.81*t
      TranslateEntity f\obj,0,eb,0
   End If
End If



;-------im wurf--------------------
   If f\wurf = 1
   If CountCollisions(f\obj) < 1 Then

Local wvb = f\ws / f\st

f\dy = (-Sin(f\wi)*f\flugl) / wvb/2
f\dz = ( Cos(f\wi)*f\flugl) / wvb



MoveEntity f\obj,0,f\dy,f\dz
End If

End If

;-------------------------

kannst du mir da helfen!? Der Stein wird bereits gehalten, ist an den Pivot geheftet,
und wenn man ihn werfen soll, dann verschwindet er einfach ! Warum !?
Coming soon:
http://img132.imageshack.us/im...im2ab6.gif

Markus2

BeitragSa, Okt 15, 2005 13:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Würde den Stein nicht an nen Pivot hängen sondern vom
Pivot nur Pos. und Winkel übernehmen .

Du hast vieleicht nen Problem mit relativen Positionen und
ner absoluten (Global)

Black Spider

BeitragSo, Okt 16, 2005 18:09
Antworten mit Zitat
Benutzer-Profile anzeigen
der EntityParent eintrag wird ja gleöscht, und das Objekt Aktualsiert wenn die Taste fürs werfen gedrückt wird...
bin echt ratlos, aber danke für deine Hilfe!
Coming soon:
http://img132.imageshack.us/im...im2ab6.gif

Markus2

BeitragSo, Okt 16, 2005 19:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo,
zur Not gibt es noch DebugLog Wink

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group