move_Entity2Entity

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Sparx

Betreff: move_Entity2Entity

BeitragDi, Feb 10, 2004 15:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Diese functionen bewegen ein entity punktgenau zum naechsten in einer vorher angegebenen Zeit. Es verändert x,y,z,pitch,yaw und roll.

[EDIT] Man könnte die sz.b. bei eienr art 7th Guest spiel verwenden.[/EDIT]

Code: [AUSKLAPPEN]
Type Entitymove
  Field Entity%
  Field time%
  Field long%
  Field Entity1X#
  Field Entity1Y#
  Field Entity1Z#
  Field Entity1Pitch#
  Field Entity1Yaw#
  Field Entity1Roll#
  Field Entity2X#
  Field Entity2Y#
  Field Entity2Z#
  Field Entity2Pitch#
  Field Entity2Yaw#
  Field Entity2Roll#
End Type




Function update_Entitymove()
  Local temp#
    For e2e.Entitymove = Each Entitymove
        If MilliSecs()-e2e\time > e2e\long%-500/fps  ;hier die gloable variable fps
          PositionEntity e2e\Entity,e2e\Entity2X,e2e\Entity2Y,e2e\Entity2Z
          RotateEntity e2e\Entity,e2e\Entity2Pitch,e2e\Entity2Yaw,e2e\Entity2Roll
          Delete e2e.Entitymove
        Else
          temp# = Float(MilliSecs()-e2e\time)/e2e\long ; muss nicht sein, spart aber zeit
          PositionEntity e2e\Entity,e2e\Entity1X+(e2e\Entity2X-e2e\Entity1X)*temp,e2e\Entity1Y+(e2e\Entity2Y-e2e\Entity1Y)*temp,e2e\Entity1Z+(e2e\Entity2Z-e2e\Entity1Z)*temp
          RotateEntity e2e\Entity,e2e\Entity1Pitch+(e2e\Entity2Pitch-e2e\Entity1Pitch)*temp,e2e\Entity1Yaw+(e2e\Entity2Yaw-e2e\Entity1Yaw)*temp,e2e\Entity1Roll+(e2e\Entity2Roll-e2e\Entity1Roll)*temp
        End If
    Next
End Function

Function new_Entity2Entity(Entity1%,Entity2%,long%)
  e2e.Entitymove = New Entitymove
  e2e\Entity = Entity1%
  e2e\time = MilliSecs()
  e2e\long = long

  e2e\Entity1X = EntityX(Entity1%)
  e2e\Entity1Y = EntityY(Entity1%)
  e2e\Entity1Z = EntityZ(Entity1%)
  e2e\Entity1Pitch = EntityPitch(Entity1%)
  e2e\Entity1Yaw = EntityYaw(Entity1%)
  e2e\Entity1Roll = EntityRoll(Entity1%)

  e2e\Entity2X = EntityX(Entity2%)
  e2e\Entity2Y = EntityY(Entity2%)
  e2e\Entity2Z = EntityZ(Entity2%)
  e2e\Entity2Pitch = EntityPitch(Entity2%)
  e2e\Entity2Yaw = EntityYaw(Entity2%)
  e2e\Entity2Roll = EntityRoll(Entity2%)
End Function[/syntax]

und hier noch ien lauffähiges Beispiel:
[syntax="bb"]Graphics3D 800,600,16,2
SetBuffer BackBuffer()
Global oldtime%,fps#




Type Entitymove
  Field Entity%
  Field time%
  Field long%
  Field Entity1X#
  Field Entity1Y#
  Field Entity1Z#
  Field Entity1Pitch#
  Field Entity1Yaw#
  Field Entity1Roll#
  Field Entity2X#
  Field Entity2Y#
  Field Entity2Z#
  Field Entity2Pitch#
  Field Entity2Yaw#
  Field Entity2Roll#
End Type







camera=CreateCamera()

light=CreateLight()
RotateEntity light,90,0,0

cube=CreateCube()
cube2=CreateCube()
RotateEntity cube,20,50,50
PositionEntity cube,0,0,5
PositionEntity cube2,20,20,50
frames
new_entity2entity(cube,cube2,3000)
Delay 200
frames
While Not KeyHit(1)
update_entitymove()
RenderWorld
frames
Flip
Wend

Function frames()
  If oldtime=MilliSecs() Then Delay(1)
  fps = 1000.0/Float((MilliSecs()-oldtime))
  oldtime = MilliSecs()
  Text 0,0,"fps="+Int(fps)
  Text 0,10,Int(MouseX()/32)
  Text 0,20,Int((MouseY()-50)/32)
End Function







Function update_Entitymove()
  Local temp#
    For e2e.Entitymove = Each Entitymove
        If MilliSecs()-e2e\time > e2e\long%-500/fps  ;hier die gloable variable fps
          PositionEntity e2e\Entity,e2e\Entity2X,e2e\Entity2Y,e2e\Entity2Z
          RotateEntity e2e\Entity,e2e\Entity2Pitch,e2e\Entity2Yaw,e2e\Entity2Roll
          Delete e2e.Entitymove
        Else
          temp# = Float(MilliSecs()-e2e\time)/e2e\long ; muss nicht sein, spart aber zeit
          PositionEntity e2e\Entity,e2e\Entity1X+(e2e\Entity2X-e2e\Entity1X)*temp,e2e\Entity1Y+(e2e\Entity2Y-e2e\Entity1Y)*temp,e2e\Entity1Z+(e2e\Entity2Z-e2e\Entity1Z)*temp
          RotateEntity e2e\Entity,e2e\Entity1Pitch+(e2e\Entity2Pitch-e2e\Entity1Pitch)*temp,e2e\Entity1Yaw+(e2e\Entity2Yaw-e2e\Entity1Yaw)*temp,e2e\Entity1Roll+(e2e\Entity2Roll-e2e\Entity1Roll)*temp
        End If
    Next
End Function

Function new_Entity2Entity(Entity1%,Entity2%,long%)
  e2e.Entitymove = New Entitymove
  e2e\Entity = Entity1%
  e2e\time = MilliSecs()
  e2e\long = long

  e2e\Entity1X = EntityX(Entity1%)
  e2e\Entity1Y = EntityY(Entity1%)
  e2e\Entity1Z = EntityZ(Entity1%)
  e2e\Entity1Pitch = EntityPitch(Entity1%)
  e2e\Entity1Yaw = EntityYaw(Entity1%)
  e2e\Entity1Roll = EntityRoll(Entity1%)

  e2e\Entity2X = EntityX(Entity2%)
  e2e\Entity2Y = EntityY(Entity2%)
  e2e\Entity2Z = EntityZ(Entity2%)
  e2e\Entity2Pitch = EntityPitch(Entity2%)
  e2e\Entity2Yaw = EntityYaw(Entity2%)
  e2e\Entity2Roll = EntityRoll(Entity2%)
End Function
User posted image

Wild-Storm

BeitragDi, Feb 10, 2004 20:22
Antworten mit Zitat
Benutzer-Profile anzeigen
sehr schön! (jetzt wo ich's ausprobiert habe Wink )
Visit http://www.next-dimension.org
-------------------------------------------------
Freeware Modelle, Texturen & Sounds:
http://www.blitzforum.de/forum...hp?t=12875

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group