Partikel Schussrichtung falsch

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
NeoRon
Beiträge: 67
Registriert: 22.03.2013 18:56

Partikel Schussrichtung falsch

Beitrag von NeoRon »

Hallo,

habe das Problem das der Schuss einer Kanone, die auf nem Vehikel montiert ist und nach links und rechts schwenken kann,
nicht in die Richtung des Winkels der Kanone fliegt.

Kann da jemand helfen?
Der Code der Kanone und des Schusses habe ich unten gepostet.

Grüße
NeoRon

Code: Alles auswählen

  ;//---------------------------Player Weapon-----------------------
  ;//Start Speed  
  If weapon\Is_Rot = 1 Or weapon\dir = 1 
    weapon\Shall_Rot + weapon\Is_Rot
  EndIf
  If weapon\Is_Rot = -1 Or weapon\dir = -1 
    weapon\Shall_Rot - weapon\Is_Rot
  EndIf
  
  If weapon\rotation <= 0
    weapon\rotation = 0
  EndIf 
  
  ;// Rotate Weapon
  If weapon\Is_Rot = 1 Or weapon\Dir = 1
    weapon\rotation + weapon\Shall_Rot
  EndIf
  If weapon\Is_Rot = -1 Or weapon\Dir = -1
    weapon\rotation - weapon\Shall_Rot
  EndIf
  
  ;// Max Speed Weapon
  If weapon\Shall_Rot => 1
    weapon\Shall_Rot = 1
  EndIf
  
  ;// Set Direction Weapon
  If weapon\dir = -1 And weapon\Shall_Speed =< 0
    weapon\dir = 0
  EndIf
  If weapon\dir = 1 And weapon\Shall_Speed =< 0
    weapon\dir = 0
  EndIf  
  
  ;// MAX Weapon Bewegung 
  If weapon\rotation => 240 
    weapon\rotation = 240
  EndIf
  If weapon\rotation =< 120
    weapon\rotation = 120
  EndIf
  
  ;// MAX Weapon Is_Rot
  If weapon\rotation => 240
    weapon\Is_Rot = 0
  ElseIf weapon\rotation =< 120
    weapon\Is_Rot = 0
  EndIf
  ;//---------------------------Player Shoot-----------------------
  
  
  ;// Start Shoot
  If Weapon\Is_Shoot = 1
    ADDShoot(#SPRITE_PLAYER_SHOOT, 1, player\PositionX+145, player\PositionY-50, 6, Weapon\rotation)
  EndIf
  
  ForEach Shoot_Act_List()
    
    ;// Min Speed Shoot
    If Shoot_Act_List()\Shall_Speed <= 0
      Shoot_Act_List()\Shall_Speed = 0
    EndIf 
    ;// Max Speed Shoot
    If Shoot_Act_List()\Shall_Speed => 10
      Shoot_Act_List()\Shall_Speed = 10
    EndIf    
    
    ;// X und Y Bewegung
    Shoot_Act_List()\PositionY - Shoot_Act_List()\Shall_Speed 
    ; x=Cos(30*#PI/180) * timer 
    If Shoot_Act_List()\direction <180
      Shoot_Act_List()\PositionX = Sin(Shoot_Act_List()\direction*#PI/180)
    EndIf
    
    If Shoot_Act_List()\direction >180
      Shoot_Act_List()\PositionX = Cos(Shoot_Act_List()\direction*#PI/180)
    EndIf
       
  Next 
The World is Cyber
SilverSurfer
Beiträge: 32
Registriert: 14.06.2015 10:23

Re: Partikel Schussrichtung falsch

Beitrag von SilverSurfer »

Hallo.... :-)
So fliegen deine Sprites gleichmäßig.
Hoffe du kannst etwas damit anfangen, ansonsten fragen....

LG Klaus

Code: Alles auswählen

Procedure UpdateMove()
  
  Static OldTime.i
  Protected Time.i, Factor.f
  
  If OldTime = 0: OldTime = ElapsedMilliseconds(): EndIf
  
  Time = ElapsedMilliseconds()
  Factor = (Time - OldTime ) * 0.001
  
ForEach Shoot_Act_List()
    
    Shoot_Act_List()\x + Shoot_Act_List()\speed + Cos( Radian( Shoot_Act_List()\flightangle ) ) * Factor
    Shoot_Act_List()\y + Shoot_Act_List()\speed + Sin( Radian( Shoot_Act_List()\flightangle ) ) * Factor
    
  Next 
  
  OldTime = ElapsedMilliseconds()
  
EndProcedure

  AddElement( Shoot_Act_List() )
  
  Shoot_Act_List()\fligtangle = Weapon()\rotation
  Shoot_Act_List()\x          = Weapon()\x
  Shoot_Act_List()\y          = Weapon()\y
  Shoot_Act_List()\speed      = 700
Benutzeravatar
NeoRon
Beiträge: 67
Registriert: 22.03.2013 18:56

Re: Partikel Schussrichtung falsch

Beitrag von NeoRon »

Hi Klaus,

warum spielt in deinem Code Zeit eine Rolle.

Könntest du vllt die einzelnen Code Zeilen erläutern, damit ich
Sie besser nachvollziehen kann?

Grüße
Manuel
The World is Cyber
SilverSurfer
Beiträge: 32
Registriert: 14.06.2015 10:23

Re: Partikel Schussrichtung falsch

Beitrag von SilverSurfer »

Hallo Manuel...

Code: Alles auswählen

Procedure UpdateMove()

Static OldTime.i
Protected Time.i, Factor.f

If OldTime = 0: OldTime = ElapsedMilliseconds(): EndIf; Beim ersten Durchlauf ist Oltime = 0, dann wäre der Factor viel zu groß.

; Jetzt holen wir die Zeit, seid dem letzten Durchlauf und teilen die durch 1000
; 1000 ms ergeben eine Sekunde und somit ergibt sich der Factor, mit dem wir die Geschwindigkeit berechnen können

Factor = (ElapsedMilliseconds() - OldTime ) * 0.001

;*************************************************************************************************************************************
;
; Da nicht alle PC's gleich schnell laufen, bewegen sich die Schüsse auch verschieden schnell, wenn sie
; mit einem festen Wert bewegst werden. Dadurch das wir die Bewegung zeitgesteuert berechnen, bewegen sich die Sprites auf jedem PC gleich schnell.
; XPosition + ObejktGeschwindigkeit in Pixel pro Sekunde * Cos( Radian( ObjektBewegungsWinkel ) ) * Factor
; und das gleiche analog mit der YPosition, wie in der For/Next Schleife.....
;
;*************************************************************************************************************************************

ForEach Shoot_Act_List()

Shoot_Act_List()\x + Shoot_Act_List()\speed + Cos( Radian( Shoot_Act_List()\flightangle ) ) * Factor
Shoot_Act_List()\y + Shoot_Act_List()\speed + Sin( Radian( Shoot_Act_List()\flightangle ) ) * Factor

Next

OldTime = ElapsedMilliseconds()

EndProcedure
Benutzeravatar
NeoRon
Beiträge: 67
Registriert: 22.03.2013 18:56

Re: Partikel Schussrichtung falsch

Beitrag von NeoRon »

Danke!

Hast mir gut geholfen.

Grüße
Manuel
The World is Cyber
Antworten