Draw3D Scrolling auf einer Map?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

M0rgenstern

Betreff: Draw3D Scrolling auf einer Map?

BeitragMi, Sep 30, 2009 21:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo.

Ich hab schon mit der Boardsuche gesucht und hab auch was gefunden.
Da hat Hectic eine Lösung gezeigt.
Aber da konnte man die Figur nur hoch rechts links und runter bewegen.
Ich hab aber eine "GTA-Steuerung" drin. Also sieht das ganze bei mir wieder anders aus.

Meine "Karte" Scrollt ganz einfach hiermit:

Code: [AUSKLAPPEN]
DrawRect3D(GrasTile,0,0,Spieler\Px#,-Spieler\Py#,1024,768)


Aber meine Gegner, Schüsse etc haben eine absolute Variable. Das heißt, dass wenn ich mich mit dem Spieler bewege, die auf dem BILDSCHIRM an der gleichen Stelle bleiben und nicht auf der KARTE.
Ich weiß, dass ich das irgendwie über ein paar Variablen verrechnen muss.
Aber ich weiß ehrlich gesagt nicht wie bzw wo ich anfangen soll.
Könnte mir da vielleicht jemand helfen, bitte?
Was auch noch nicht ganz funktioniert, ist, dass der Spieler immer in der Mitte der Kamera bleibt. Aber das wäre momentan noch reine Nebensache.

Der ganze Code sieht jetzt so aus, wenn den jemand benötigt (Jaaahaa... Ich hab ein Partikelsystem für Blut und Gedärme eingebaut^^)

Code: [AUSKLAPPEN]
AppTitle "Draw3D V.3.2 - LoadFont3D"
Graphics3D 1024,768,0,1
SetBuffer BackBuffer()
SeedRnd MilliSecs()

Local Timer=CreateTimer(60)
Local Camera=CreateCamera()
CameraClsColor Camera,5,5,5

Include "Includes\Draw3D.bb"
DrawInit3D(Camera)
Origin3D(1024,768)


;_______________________________________________
Global GrasTile = loadimage3d("gfx\BodenTile.png", 1, 2, 1)
Global BlutLache = loadimage3d("gfx\BlutLache.png", 2, 2, 1)
Global GegnerTestI = loadimage3d("gfx\block3.bmp", 1, 2, 0)
Global PistSchuss = loadimage3d("gfx\PistolenSchuss.png", 2, 2, 0)
Global PlayerImage=LoadImage3D("gfx\spaceship3.png", 4, 2, 0)
Global MouseImage = loadimage3d("gfx\target.png", 2, 2, 0)

;++++++++++++++

Global GegnerTimer = MilliSecs()

;++++++++++++++

Global Schriftart = loadfont3d("Fonts\Cosmic1.png", 2, 2, 0)

Global Scroll_X
Global Scroll_Y


;++++++++++++++

Type TWaffe
 Field WName$
 Field WMunition%, WMagazine%
 Field WSchussProMagazin%, WKadenz%, WDamage%, WSpeed%
End Type

Global PW_Pistole.TWaffe = WaffeErstellen("Pistole", 10, 9999, 10, 400, 17, 15)
Global PW_MP.TWaffe = WaffeErstellen("MP", 25, 10, 25, 200, 13, 19)
Global PW_Schrot.TWaffe = WaffeErstellen("Shotgun", 8, 10, 8, 550, 33, 12)
Global PW_MG.TWaffe = WaffeErstellen("MG", 50, 10, 50, 100, 24, 25)
Global PW_Laser.TWaffe = WaffeErstellen("Laser", 500, 1, 500, 1, 22, 7)
Global PW_Magnum.TWaffe = WaffeErstellen(".45er Magnum", 7, 10, 7, 530, 26, 11)

Type TGegnerTest
 Field GTx#, GTy#, GTWinkel, GTGeschw#, GTImage, GTRotatGe#, Dead, GTRotatRich
End Type

Type TPartikel
   Field PTx#, PTy#, PTWinkel#, PTSpeed#, PTLebensdauer#, PTStartzeit#, PTtot, PTImage, PTIWinkel, PTGroesse
End Type

Type TPlayerSchuss
 Field PSx#, PSy#, PSWinkel, PSGeschw#, PSImage, PSDead
End Type

Type TPlayer
 Field Px#, Py#, PWinkel, PEnergie, PAltx#, PAlty#, PGeschw#, Image, Dead
 Field PGewWaffe.TWaffe, PSchuTimer, PWafKadenz
End Type

Global Spieler.TPlayer = New TPlayer
 Spieler\Px# = (20)
 Spieler\Py# = (20)
 Spieler\PWinkel = 0
 Spieler\Image = PlayerImage
 Spieler\PEnergie = 100
 Spieler\PGeschw# = 5
 Spieler\Dead = 0
 Spieler\PGewWaffe = PW_Pistole
 Spieler\PSchuTimer = MilliSecs()
;_________________________________________________



Repeat

   SpielerSteuerung()
   SpielerSchuss()
   SSchussBewegen()
   GegnerErstellenTest()
   GegnerBewegenTest()
   PSchussKollision()
   BlutPartikelUpdate()
   AllesMalen()

   

   ;Zeichen()
   
   WaitTimer(Timer)
   RenderWorld
   Clear3D()
   Flip 0
Until KeyHit(1)
End



;___________________________________________________
Function SpielerSteuerung()

 Spieler\PAltx# = Spieler\Px#
 Spieler\PAlty# = Spieler\Py#

 Spieler\PWinkel#=ATan2(Spieler\Px#-MouseX3D,Spieler\Py#-MouseY3D) ;Blickrichtung



 ;Geradeaus
   If KeyDown(17) Then
      Spieler\Px#=Spieler\Px#-Sin(Spieler\PWinkel)*Spieler\PGeschw#
      Spieler\Py#=Spieler\Py#-Cos(Spieler\PWinkel)*Spieler\PGeschw#
   EndIf
   
   ;Links
   If KeyDown(30) Then
      Spieler\Px#=Spieler\Px#-Sin(Spieler\PWinkel+90)*Spieler\PGeschw#
      Spieler\Py#=Spieler\Py#-Cos(Spieler\PWinkel+90)*Spieler\PGeschw#
   EndIf
   
   ;Rechts
   If KeyDown(32) Then
      Spieler\Px#=Spieler\Px#+Sin(Spieler\PWinkel+90)*Spieler\PGeschw#
      Spieler\Py#=Spieler\Py#+Cos(Spieler\PWinkel+90)*Spieler\PGeschw#
   EndIf
   
   ;Nach hinten
   If KeyDown(31) Then
      Spieler\Px#=Spieler\Px#+Sin(Spieler\PWinkel)*Spieler\PGeschw#
      Spieler\Py#=Spieler\Py#+Cos(Spieler\PWinkel)*Spieler\PGeschw#
   EndIf
   
 ;Waffenauswahl
   If KeyDown(2) Then
      Spieler\PGewWaffe = PW_Pistole
      EndIf
   
   If KeyDown(3) Then
      Spieler\PGewWaffe = PW_MP
   EndIf
   
   If KeyDown(4) Then
      Spieler\PGewWaffe = PW_Schrot
   EndIf
   
   If KeyDown(5) Then
      Spieler\PGewWaffe = PW_MG
   EndIf
   
   If KeyDown(6) Then
      Spieler\PGewWaffe = PW_Laser
   EndIf
   
   If KeyDown(7) Then
      Spieler\PGewWaffe = PW_Magnum
   EndIf   

   If Spieler\Px# >= 490 Then Spieler\Px# = Spieler\PAltx#
   If Spieler\Px# <= -490 Then Spieler\Px# = Spieler\PAltx#
   If SPieler\Py# >= 350 Then Spieler\Py# = Spieler\PAlty#
   If Spieler\Py# <= -350 Then Spieler\Py# = Spieler\PAlty#

End Function

;++++++++++++++

Function GegnerErstellenTest()

   If (GegnerTimer + Rand(2000,4000)) < MilliSecs() Then
      
      For i = 1 To Rand(1,3)
         Gegner.TGegnerTest = New TGegnerTest
         Gegner\GTx# = Rand(-490, 490)
         Gegner\GTy# = 355
         Gegner\GTGeschw# = Rand(1,8)
         Gegner\GTWinkel = Rand(0,360)
         Gegner\GtRotatGe = Rand(0,20)
         Gegner\GTImage = GegnerTestI
         Gegner\GTRotatRich = Rand(1,2)
         Gegner\Dead = 0
      Next
      
      GegnerTimer = MilliSecs()
   EndIf

End Function

;++++++++++++++

Function GegnerBewegenTest()

   For Gegner.TGegnerTest = Each TGegnerTest
   
      Gegner\GTy# = Gegner\GTy# - Gegner\GTGeschw#
      
      If Gegner\GTRotatRich = 1 Then ;Im Uhrzeigersinn
         Gegner\GTWinkel = Gegner\GTWinkel + Gegner\GTRotatGe
      ElseIf Gegner\GTRotatRich = 2 Then
         Gegner\GTWinkel = Gegner\GTWinkel - Gegner\GTRotatGe
      EndIf
      
      If Gegner\GTy# > 384 Then Gegner\Dead = 1
      If Gegner\Dead = 1 Then Delete Gegner.TGegnerTest
      
   Next

End Function

;++++++++++++++

Function SpielerSchuss()
   
   If ((Spieler\PSchuTimer + Spieler\PGewWaffe\WKadenz) < MilliSecs()) And Spieler\Dead <> 1 Then
      If MouseDown(1) Then
            
               

         If Spieler\PGewWaffe\WMunition <= 0 Then ;Überprüfen ob überhaupt noch eine Kugel im Lauf ist
               Spieler\PGewWaffe\WMunition = 0 ;Damit auf jeden Fall von 0 an gerechnet wird
                  
               If Spieler\PGewWaffe\WMagazine > 0 Then
                  Spieler\PGewWaffe\WMunition = Spieler\PGewWaffe\WMunition + Spieler\PGewWaffe\WSchussProMagazin ;Waffe nachladen, wenn das Magazin leer war
                  Spieler\PGewWaffe\WMagazine = Spieler\PGewWaffe\WMagazine - 1 ;Ein Magazin weniger
               EndIf
               
         ElseIf Spieler\PGewWaffe\WMunition > 0 Then
                  
            If Spieler\PGewWaffe = PW_Schrot
                   
               For i = 1 To 5 ;Schrotflinte... Damit es ne schöne Streuung gibt
                        
                  Schuss.TPlayerSchuss = New TPlayerSchuss
                        
                  Schuss\PSy# = Spieler\Py#-Cos(Spieler\PWinkel)*Schuss\PSGeschw
                  Schuss\PSx# = Spieler\Px#-Sin(Spieler\PWinkel)*Schuss\PSGeschw
                  Schuss\PSWinkel = Spieler\PWinkel+Rand(-23,23)
                  Schuss\PSImage = PistSchuss
                  SChuss\PSDead = 0
                  Schuss\PSGeschw = Spieler\PGewWaffe\WSpeed
                        

               Next
                     
               Spieler\PGewWaffe\WMunition = Spieler\PGewWaffe\WMunition - 1
               If Spieler\PGewWaffe\WMunition < 0 Then Spieler\PGewWaffe\WMunition = 0
               
            Else
                  
               Schuss.TPlayerSchuss = New TPlayerSchuss ;Ansonsten schießen
                  
               Schuss\PSy# = Spieler\Py#-Cos(Spieler\PWinkel)*Schuss\PSGeschw
               Schuss\PSx# = Spieler\Px#-Sin(Spieler\PWinkel)*Schuss\PSGeschw
               Schuss\PSWinkel = Spieler\PWinkel
         
               Schuss\PSImage = PistSchuss
               Schuss\PSDead = 0
               Schuss\PSGeschw = Spieler\PGewWaffe\WSpeed
               Spieler\PGewWaffe\WMunition = Spieler\PGewWaffe\WMunition - 1
               If Spieler\PGewWaffe\WMunition < 0 Then Spieler\PGewWaffe\WMunition = 0 ;Nochmal extra überprüfen dass nichts unter 0 geht
            EndIf
            
            
         EndIf
         

      
         
         Spieler\PSchuTimer = MilliSecs()
      EndIf
   EndIf
         

End Function

;++++++++++++++

Function SSchussBewegen()

   For Schuss.TPlayerSchuss = Each TPlayerSchuss
   
      Schuss\PSx#=Schuss\PSx#-Sin(Schuss\PSWinkel)*Schuss\PSGeschw#
     Schuss\PSy#=Schuss\PSy#-Cos(Schuss\PSWinkel)*Schuss\PSGeschw#
      
            
      If SChuss\Psx# >= 512 Then Schuss\PSDead = 1
      If Schuss\Psx# <= -512 Then Schuss\PSDead = 1
      If Schuss\Psy# >= 384 Then Schuss\PSDead = 1
      If Schuss\Psy# <= -384 Then Schuss\PSDead = 1
      
      If Schuss\PSDead = 1 Then Delete Schuss.TPlayerSchuss
      
   Next

End Function

;++++++++++++++

Function AllesMalen()

   
   For Gegner.TGegnerTest = Each TGegnerTest
      Drawimage3D(Gegner\GTImage, Gegner\GTx#, Gegner\Gty#, 0, Gegner\GTWinkel, 1)
   Next
   
   For SChuss.TPlayerSchuss = Each TPlayerSchuss
      Drawimage3D(Schuss\PSImage, Schuss\PSx#, SChuss\PSy#, 0, SChuss\PSWinkel, 1.5)
   Next
   
   For BlutPartikel.TPartikel = Each TPartikel
   
      Drawimage3d(BlutPartikel\PTIMage, BlutPartikel\PTx, BlutPartikel\PTy, 0, BlutPartikel\PTIWinkel, BlutPartikel\PTGroesse)
   
   Next   

   
   DrawImage3D(PlayerImage, Spieler\Px#, Spieler\Py#, 0, Spieler\PWinkel#, 1)
   Drawimage3d(MouseImage, MouseX3D, MouseY3D, 0, 0, 1)
   
   ColorT3D(255, 10, 10, 1)
   
   DrawRect3D(GrasTile,0,0,Spieler\Px#,-Spieler\Py#,1024,768)
   

   Text3D(Schriftart, (-400), 300, "Waffe: " + Spieler\PGewWaffe\Wname)
   Text3D(Schriftart, (-400), 280, "Munition: " + Spieler\PGewWaffe\WMunition + "/" + Spieler\PGewWaffe\WMagazine, 0, 0, 0)

End Function

;++++++++++++++

Function WaffeErstellen.TWaffe(name$, Munition, Magazine, SchussProMagazin, Kadenz, Damage, Speed)

   Local W.TWaffe = New TWaffe
   W\WName = name$
   W\WMunition = Munition
   W\WMagazine = Magazine
   W\WSchussProMagazin = SchussProMagazin
   W\WKadenz = Kadenz
   W\WDamage = Damage
   W\WSpeed = Speed
   
   Return W

End Function

;++++++++++++++

Function PSchussKollision()

   For Schuss.TPlayerSChuss = Each TPlayerSchuss
      For Gegner.TGegnerTest = Each TGegnerTest
         If ImagesOverlap3D(Schuss\PSImage, Schuss\PSx#, Schuss\PSy#, SChuss\PSWinkel, 1.5 ,Gegner\GTImage, Gegner\GTx#, Gegner\GTy#, Gegner\GTWinkel, 1) Then
            If Gegner\Dead = 0 Then
               BlutInnereienPartikelCreate(Gegner\GTx#, Gegner\GTy#)
               Gegner\Dead = 1
               Schuss\PSDead = 1
            EndIf
         EndIf
      Next
      
   Next

End Function

;++++++++++++++

Function BlutInnereienPartikelCreate(EnemyX, EnemyY)

   For i = 0 To 5
      BlutPartikel.TPartikel = New TPartikel
      
         BlutPartikel\PTx# = EnemyX
         BlutPartikel\PTy# = EnemyY
         BlutPartikel\PTIWinkel = Rand(0,360)
         BlutPartikel\PTWinkel# = ATan2(EnemyX*(-1.0),EnemyY*(-1.0)) + Rand(-45,45)
         BlutPartikel\PTSpeed# = Rnd(5, 10)
         BlutPartikel\PTStartzeit# = MilliSecs()
         BlutPartikel\PTLebensdauer# = Rand(1000, 3000)
         BlutPartikel\PTtot = 0
         BlutPartikel\PTGroesse = Rand(1, 1.5)
         BlutPartikel\PTIMage = BlutLache
      
   Next

End Function

;++++++++++++++

Function BlutPartikelUpdate()
   
   For BlutPartikel.TPartikel = Each TPartikel
   
      BlutPartikel\PTx#=BlutPartikel\PTx#-Sin(BlutPartikel\PTWinkel#)*BlutPartikel\PTSpeed#
       BlutPartikel\PTy#=BlutPartikel\PTy#-Cos(BlutPartikel\PTWinkel#)*BlutPartikel\PTSpeed#
      
      
      If BlutPartikel\PTSpeed# > 0 Then
      
         BlutPartikel\PTSpeed# = BlutPartikel\PTSpeed - Rand(0.7,1.3)
      
      ElseIf BlutPartikel\PTSpeed# < 0 Then
         
         BlutPartikel\PTSpeed# = 0
         
      EndIf
      
      If BlutPartikel\PTStartzeit# + BlutPartikel\PTLebensdauer# < MilliSecs() Then
         BlutPartikel\PTtot = 1
      EndIf
      
      If BlutPartikel\PTtot = 1 Then Delete BlutPartikel.TPartikel
      
      
   Next
   
End Function

;++++++++++++++

Function ImagesOverlap3D(FDrawHandleA%,FDrawXA#,FDrawYA#,FDrawAngleA#,FDrawScaleA#,FDrawHandleB%,FDrawXB#,FDrawYB#,FDrawAngleB#,FDrawScaleB#)
   
   
   ;FACEBANK(AUS)WEISUNGEN
   Local LDrawXRanA#=PeekFloat(GDrawBank,FDrawHandleA+DRAWBANKXSIZE)*FDrawScaleA
   Local LDrawYRanA#=PeekFloat(GDrawBank,FDrawHandleA+DRAWBANKYSIZE)*FDrawScaleA
   
   ;VARIABLENDEKLARATIONEN
   Local IDrawXA#[3]
   Local IDrawYA#[3]
   
   ;EXTRA/WINKELBERECHNUNG
   If FDrawAngleA<>0 Then
     
      ;SCHNELLE/UMRECHNUNG/VON: 'aMul'
      Local IDrawTCosA#=Cos(FDrawAngleA)
      Local IDrawTSinA#=Sin(FDrawAngleA)
      Local IDrawXPos1A#=LDrawXRanA*IDrawTCosA-LDrawYRanA*IDrawTSinA
      Local IDrawYPos1A#=LDrawYRanA*IDrawTCosA+LDrawXRanA*IDrawTSinA
      Local IDrawXPos2A#=LDrawXRanA*IDrawTCosA+LDrawYRanA*IDrawTSinA
      Local IDrawYPos2A#=LDrawYRanA*IDrawTCosA-LDrawXRanA*IDrawTSinA
   Else
     
      ;DIREKTE/DARSTELLUNG
      IDrawXPos1A=LDrawXRanA
      IDrawYPos1A=LDrawYRanA
      IDrawXPos2A=LDrawXRanA
      IDrawYPos2A=LDrawYRanA
   End If
   
   ;ECKENPOS/ZWISCHENSPEICHER
   IDrawXA[0]=FDrawXA-IDrawXPos1A
   IDrawYA[0]=FDrawYA+IDrawYPos1A
   IDrawXA[1]=FDrawXA+IDrawXPos2A
   IDrawYA[1]=FDrawYA+IDrawYPos2A
   IDrawXA[2]=FDrawXA+IDrawXPos1A
   IDrawYA[2]=FDrawYA-IDrawYPos1A
   IDrawXA[3]=FDrawXA-IDrawXPos2A
   IDrawYA[3]=FDrawYA-IDrawYPos2A


   
   ;FACEBANK(AUS)WEISUNGEN
   Local LDrawXRanB#=PeekFloat(GDrawBank,FDrawHandleB+DRAWBANKXSIZE)*FDrawScaleB
   Local LDrawYRanB#=PeekFloat(GDrawBank,FDrawHandleB+DRAWBANKYSIZE)*FDrawScaleB
   
   ;ENTFERUNGUNGSRECHUNG VON: 'faeX'
   SA# = Sqr(LDrawXRanA*LDrawXRanA + LDrawYRanA*LDrawYRanA)
   SB# = Sqr(LDrawXRanB*LDrawXRanB + LDrawYRanB*LDrawYRanB)
   XDist# = FDrawXA-FDrawXB
   YDist# = FDrawYA-FDrawYB
   Dist# = Sqr(XDist*XDist + YDist*YDist)
   If Dist > (SA+SB) Then Return False
   
   ;VARIABLENDEKLARATIONEN
   Local IDrawXB#[3]
   Local IDrawYB#[3]
   
   ;EXTRA/WINKELBERECHNUNG
   If FDrawAngleB<>0 Then
     
      ;SCHNELLE/UMRECHNUNG/VON: 'aMul'
      Local IDrawTCosB#=Cos(FDrawAngleB)
      Local IDrawTSinB#=Sin(FDrawAngleB)
      Local IDrawXPos1B#=LDrawXRanB*IDrawTCosB-LDrawYRanB*IDrawTSinB
      Local IDrawYPos1B#=LDrawYRanB*IDrawTCosB+LDrawXRanB*IDrawTSinB
      Local IDrawXPos2B#=LDrawXRanB*IDrawTCosB+LDrawYRanB*IDrawTSinB
      Local IDrawYPos2B#=LDrawYRanB*IDrawTCosB-LDrawXRanB*IDrawTSinB
   Else
     
      ;DIREKTE/DARSTELLUNG
      IDrawXPos1B=LDrawXRanB
      IDrawYPos1B=LDrawYRanB
      IDrawXPos2B=LDrawXRanB
      IDrawYPos2B=LDrawYRanB
   End If
   
   ;ECKENPOS/ZWISCHENSPEICHER
   IDrawXB[0]=FDrawXB-IDrawXPos1B
   IDrawYB[0]=FDrawYB+IDrawYPos1B
   IDrawXB[1]=FDrawXB+IDrawXPos2B
   IDrawYB[1]=FDrawYB+IDrawYPos2B
   IDrawXB[2]=FDrawXB+IDrawXPos1B
   IDrawYB[2]=FDrawYB-IDrawYPos1B
   IDrawXB[3]=FDrawXB-IDrawXPos2B
   IDrawYB[3]=FDrawYB-IDrawYPos2B
   
   ;VARIABLENDEKLARATIONEN
   Local IDrawXCenter#
   Local IDrawYCenter#
   
   ;QUADKOLLISION[A>B]/VORBEREITEN
   IDrawXCenter=(IDrawXA[0]+IDrawXA[1]+IDrawXA[2]+IDrawXA[3])*0.25
   IDrawYCenter=(IDrawYA[0]+IDrawYA[1]+IDrawYA[2]+IDrawYA[3])*0.25
   
   ;QUADKOLLISION/BERECHNEN+ANWENDEN
   If (IDrawYB[1]-IDrawYB[0])*(IDrawXCenter-IDrawXB[1])-(IDrawXB[1]-IDrawXB[0])*(IDrawYCenter-IDrawYB[1])>0 Then
      If (IDrawYB[2]-IDrawYB[1])*(IDrawXCenter-IDrawXB[2])-(IDrawXB[2]-IDrawXB[1])*(IDrawYCenter-IDrawYB[2])>0 Then
         If (IDrawYB[3]-IDrawYB[2])*(IDrawXCenter-IDrawXB[3])-(IDrawXB[3]-IDrawXB[2])*(IDrawYCenter-IDrawYB[3])>0 Then
            If (IDrawYB[0]-IDrawYB[3])*(IDrawXCenter-IDrawXB[0])-(IDrawXB[0]-IDrawXB[3])*(IDrawYCenter-IDrawYB[0])>0 Then
               Return True
            End If
         End If
      End If
   End If
   
   ;QUADKOLLISION[B>A]/VORBEREITEN
   IDrawXCenter=(IDrawXB[0]+IDrawXB[1]+IDrawXB[2]+IDrawXB[3])*0.25
   IDrawYCenter=(IDrawYB[0]+IDrawYB[1]+IDrawYB[2]+IDrawYB[3])*0.25
   
   ;QUADKOLLISION/BERECHNEN+ANWENDEN
   If (IDrawYA[1]-IDrawYA[0])*(IDrawXCenter-IDrawXA[1])-(IDrawXA[1]-IDrawXA[0])*(IDrawYCenter-IDrawYA[1])>0 Then
      If (IDrawYA[2]-IDrawYA[1])*(IDrawXCenter-IDrawXA[2])-(IDrawXA[2]-IDrawXA[1])*(IDrawYCenter-IDrawYA[2])>0 Then
         If (IDrawYA[3]-IDrawYA[2])*(IDrawXCenter-IDrawXA[3])-(IDrawXA[3]-IDrawXA[2])*(IDrawYCenter-IDrawYA[3])>0 Then
            If (IDrawYA[0]-IDrawYA[3])*(IDrawXCenter-IDrawXA[0])-(IDrawXA[0]-IDrawXA[3])*(IDrawYCenter-IDrawYA[0])>0 Then
               Return True
            End If
         End If
      End If
   End If
   
   ;VARIABLENDEKLARATIONEN
   Local IDrawACount%
   Local IDrawBCount%
   Local IDrawADrive%
   Local IDrawBDrive%
   Local IDrawLIA#
   Local IDrawLI1#
   Local IDrawLI2#
   
   ;ALLE[B]PRODUKTE
   For IDrawBCount=0 To 3
      IDrawBDrive=(IDrawBCount+1) Mod 4
     
      ;ALLE[A]PRODUKTE
      For IDrawACount=0 To 3
         IDrawADrive=(IDrawACount+1) Mod 4
         
         ;LINES/INTERSECTS/DURCHFÜHREN
         IDrawLIA=(IDrawXA[IDrawADrive]-IDrawXA[IDrawACount])*(IDrawYB[IDrawBDrive]-IDrawYB[IDrawBCount])-(IDrawXB[IDrawBDrive]-IDrawXB[IDrawBCount])*(IDrawYA[IDrawADrive]-IDrawYA[IDrawACount])
         IDrawLI1=((IDrawXB[IDrawBDrive]-IDrawXB[IDrawBCount])*(IDrawYA[IDrawACount]-IDrawYB[IDrawBCount])-(IDrawXA[IDrawACount]-IDrawXB[IDrawBCount])*(IDrawYB[IDrawBDrive]-IDrawYB[IDrawBCount]))/IDrawLIA
         IDrawLI2=((IDrawXA[IDrawADrive]-IDrawXA[IDrawACount])*(IDrawYA[IDrawACount]-IDrawYB[IDrawBCount])-(IDrawXA[IDrawACount]-IDrawXB[IDrawBCount])*(IDrawYA[IDrawADrive]-IDrawYA[IDrawACount]))/IDrawLIA
         If IDrawLI1=>0 And IDrawLI1=<1 And IDrawLI2=>0 And IDrawLI2=<1 Then Return True
      Next
   Next
   
   
   
   
End Function


Lg, M0rgenstern

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Sep 30, 2009 21:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast eine Playerposition Spieler\Px, Spieler\Py welches auch gleich das negative OFFSET für deine Schüsse sein muß.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

M0rgenstern

BeitragMi, Sep 30, 2009 21:58
Antworten mit Zitat
Benutzer-Profile anzeigen
??? Und OFFSET bedeutet was?
Sorry

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Okt 01, 2009 0:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn ein Schuss auf X-Position=200 erstellt wird, und der Player/die Map sich auf X=250 befindet, dann muß der Schuss auf X=-50 eingezeichnet werden.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

M0rgenstern

BeitragDo, Okt 01, 2009 16:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm... und das gleiche dann wohl auch mit der y-achse?

Also im Prinzip muss man alles relativ zur spielerposition verschieben?

Lg, M0rgenstern

ToeB

BeitragDo, Okt 01, 2009 21:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo du subthrahierst alle Positionen auf der Karte mit der ScrollX/Y Variable .

Beispiel :
Code: [AUSKLAPPEN]
ScrollX = -200
ScrollY = -300
Rect 20-ScrollX,30-ScrollY,30,30,0

Das soll ein Rechteck an der Absoluten Position 20/30 zeichnen (also die RICHTIGE Position auf der Karte). Damit das rechteck aber mit gescrollt wird muss man nur noch den X wert - ScrollX und den Y wert - ScrollY rechnen. Dann wird das rechteck an der festgelegen Position gezeichnet ob wohl es sich mit der Karte bewegt. Das musst du mit ALLEN Koordinaten machen (Schüssen/Player/Gegener etc.) die auf der Karte eine ABSOLUTE Position haben sollen. DInge wie HUD oder so können natürlich so bleiben X)

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

M0rgenstern

BeitragSa, Okt 03, 2009 0:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm.. und woher weiß ich wie groß die SCrollx/y Variablen sein sollen?

Ich versteh das Prinzip zwar, aber irgendwie fällt mir die Umsetzung schwer.
Momentan sieht das so aus:

Code: [AUSKLAPPEN]
Global Scroll_X = -200
Global Scroll_Y = -100


Code: [AUSKLAPPEN]
Function AllesMalen()

   
   For Gegner.TGegnerTest = Each TGegnerTest
      Drawimage3D(Gegner\GTImage, Gegner\GTx#-Scroll_X, Gegner\Gty#-Scroll_Y, 0, Gegner\GTWinkel, 1)
   Next
   
   For SChuss.TPlayerSchuss = Each TPlayerSchuss
      Drawimage3D(Schuss\PSImage, Schuss\PSx#-Scroll_X, SChuss\PSy#-SCroll_Y, 0, SChuss\PSWinkel, 1.5)
   Next
   
   For BlutPartikel.TPartikel = Each TPartikel
   
      Drawimage3d(BlutPartikel\PTIMage, BlutPartikel\PTx-SCroll_X, BlutPartikel\PTy-SCroll_Y, 0, BlutPartikel\PTIWinkel, BlutPartikel\PTGroesse)
   
   Next   

   
   DrawImage3D(PlayerImage, Spieler\Px#-Scroll_x, Spieler\Py#-SCroll_y, 0, Spieler\PWinkel#, 1)
   Drawimage3d(MouseImage, MouseX3D, MouseY3D, 0, 0, 1)
   
   ColorT3D(255, 10, 10, 1)
   
   DrawRect3D(GrasTile,0,0,Spieler\Px-SCroll_x,Spieler\Py-Scxroll_y,1024,768)
   

   Text3D(Schriftart, (-400), 300, "Waffe: " + Spieler\PGewWaffe\Wname)
   Text3D(Schriftart, (-400), 280, "Munition: " + Spieler\PGewWaffe\WMunition + "/" + Spieler\PGewWaffe\WMagazine, 0, 0, 0)
   
   Text3D(Schriftart, (260), 300, "Kills: " + Spieler\PKills, 0, 0, 0)

End Function


Aber es sieht nicht wirklich nach Scrollen aus.

Lg, M0rgenstern

ToeB

BeitragSa, Okt 03, 2009 0:38
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn du eine playerposition hast die auf der map liegt dann sagst du einfach
Code: [AUSKLAPPEN]
ScrollX = PlayerX
ScrollY = PlayerY


Wenn dein Player aber immer in der Mitte des Bildschirmes gezeichnet wird und nur die map sich drunter her bewegen soll, dann musst du ScrollX und ScrollY statt der Player Position verändern.

Nimm aber die Obene genannte variante, da musst du hinterher nicht mehr so viel umrechnen, da du ja die Positionen auf der Map kennst...

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

M0rgenstern

BeitragSa, Okt 03, 2009 1:01
Antworten mit Zitat
Benutzer-Profile anzeigen
So...
Sorry. Aber ich bekomm das nicht in meinen SChädel.

Also. Ich hab die SpielerVariable Spieler\Px und Spieler\Py
Mein Spieler soll immer in der Mitte des Bildschirms bleiben.
Also muss ich ihn auf 0/0 erstellen lassen und das dann auf die SCrollX SCrollY Variable übertragen.
Und überall wo normalerweise Spieler\Px bzw Spieler\Py steht muss ich ScrollX bzw SCrollY einsetzen alleinschon für die Bewegung. Und beim Zeichnen muss ich die SCrollX und ScrollY Variablen auch noch mal von den X und Y Koordinaten der anderen Objetkte abziehen?
Wenn ich das mache, dann sieht das irgendwie komisch aus und die Steuerung ist dann irgendwie auch fürn Arsch....

Ich versteh das irgendwie net so ganz. Wäre echt toll, wenn mir das bitte jemand erklären würde.

Lg, M0rgenstern

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Okt 03, 2009 1:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Um das mal etwas einfacher erklären zu können, nehme ich eine imaginäre Kamera ins Spiel.

Dafür gibt es natürlich viele verschiedene Scrollmöglichkeiten. So eine, dass erst dann die Map mit scrollt, wenn der Spieler schon eine Weile in eine Richtung gelaufen ist. Hat den Vorteil, dass die Map nicht immer rumscrollt, was in bestimmten Spielen hinderlich sein kann. In diesem Fall benutzt du zusätzlich zur Spielerposition nich eine Scrollposition. Diese gibt im grunde nichts anderes als die Kameraposition an. Kannst sie auch MapX / MapY nennen.

Da nach deinen Angaben aber der Spieler immmer an Position 0/0 des Draw3D-Koordinatensystems sich befindet und kein Pixel weit sich davon entfernt, scrollt also die Map unter seinen Füssen durch. Das entspricht also eine negative 1:1 Bewegung der Spielerposition. In so einem Fall kannst du auf eine zusätzliche Scrollposition oder Mapposition, je nachdem wie du sie nennen magst verzichten. Du nimmst also direkt Spielerposition negativ auf die Scrollposition deiner Map.

Das heisst: Befindet sich der Spieler auf X=+100, Y=+50, dann zeichnest du diesen ja trotzdem auf Bildschirmkoordinate 0/0, aber die Map muß ja nach X=-100, Y=-50 versetzt gezeichnet werden. Und natürlich auch alle Objekte die sich auf der Map befinden bewegen sich mit dem Boden mit. So Sachen wie Häuser, Bäume, Steine, Fahrzeuge, Kanonen und andere Gegner die sich von ihrem Standpunkt aus ja nicht unbeding bewegen müssen. Die Spielerposition beeinflusst also nicht unbedingt tatsächlich gezeichnete Spielerposition auf dem Bildschirm, jedoch schon die Scrollposition der Map, was im übrigen die Kameraposition entspricht.

Und wenn nun ein Gegner rumballert, dann müssen natürlich seine Schüsse von da losfliegen, wo der jeweilige Gegner steht. Und diese wird auf dein Bildschirm auch abhängig der Spielerposition gezeichnet. Eine Kollisionsprüfung zeischen Spieler und Schüsse geht dann ganz ohne Zwischenwerte, da sich der Player schon auf X1/Y1 befindet und die Schüsse an X2/Y2. Kommt es zu einer Überlappungt, wurde getroffen. Die Scrollposition ist nur für das zeichnen da, nicht für weitere Berechnungen. Außer natürlich um den sichtbaren Bildschirmbereich so einzugrenzen, dass auch nur dieser gezeichnet wird. Komm nicht auf die Idee die ganze Map zu zeichnen wo man nur 1% von sieht. Wird kein Rechner gerne mit machen.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

M0rgenstern

BeitragSa, Okt 03, 2009 12:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey, danke. Vom Prinzip her hab ichs jetzt wirklich verstanden.
Habs auch versucht so umzusetzen, aber es sieht einfach scheiße aus.
Je nachdem, wie ich mich bewege sieht es einfach so aus, als würden sich die anderen Sachen langsamer bewegen.
Und der Spieler richtet sich auch nicht mehr richtig nach der Maus aus.

Der Code sieht momentan so aus:

Code: [AUSKLAPPEN]
Function AllesMalen()

   
   For Gegner.TGegnerTest = Each TGegnerTest
      Drawimage3D(Gegner\GTImage, Gegner\GTx#-Spieler\Px#, Gegner\Gty#-Spieler\Py#, 0, Gegner\GTWinkel, 1)
   Next
   
   For SChuss.TPlayerSchuss = Each TPlayerSchuss
      Drawimage3D(Schuss\PSImage, Schuss\PSx#-Spieler\Px#, SChuss\PSy#-Spieler\Py#, 0, SChuss\PSWinkel, 1.5)
   Next
   
   For BlutPartikel.TPartikel = Each TPartikel
   
      Drawimage3d(BlutPartikel\PTIMage, BlutPartikel\PTx-Spieler\Px#, BlutPartikel\PTy-Spieler\Py#, 0, BlutPartikel\PTIWinkel, BlutPartikel\PTGroesse)
   
   Next   

   
   DrawImage3D(PlayerImage, 0, 0, 0, Spieler\PWinkel#, 1)
   Drawimage3d(MouseImage, MouseX3D, MouseY3D, 0, 0, 1)
   
   ColorT3D(255, 10, 10, 1)
   
   DrawRect3D(GrasTile,0,0,Spieler\Px#,Spieler\Py#,1024,768)
   

   Text3D(Schriftart, (-400), 300, "Waffe: " + Spieler\PGewWaffe\Wname)
   Text3D(Schriftart, (-400), 280, "Munition: " + Spieler\PGewWaffe\WMunition + "/" + Spieler\PGewWaffe\WMagazine, 0, 0, 0)
   
   Text3D(Schriftart, (260), 300, "Kills: " + Spieler\PKills, 0, 0, 0)

End Function


Lg, M0rgenstern

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Okt 03, 2009 13:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Je nachdem, wie ich mich bewege sieht es einfach so aus, als würden sich die anderen Sachen langsamer bewegen.

Da sehe ich aber nix falsches bei. Wenn die Schüsse sich nur wenig langsamer bewegen als der Spieler sich bewegen kann, was in vielen Spielen üblich aber total unrealistisch ist, kann eben so ein Effekt auftretten. Da hilft nur, die Schüsse schneller machen oder so zu lassen.

Zitat:
Und der Spieler richtet sich auch nicht mehr richtig nach der Maus aus.

Und das heisst nun genau? Richtet sich der Spieler nur ungefähr zur Maus hin, oder total falsch? Hängt es vielleicht mit der Spielerposition zusammen? Wenn ja, dann lass den Spieler per Atan2 auf Position 0/0 berechnen. Denn die Maus bewegt sich ja nicht mit dem Scrolling auf der Map, sondern ist fest mit der kamera verankert. Egal wohin du gegangen bist, die Maus geht immer von X/Y - nach X/Y + des Bildschimes.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

M0rgenstern

BeitragSa, Okt 03, 2009 14:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, wegen den ganzen Objekten:

Die Gegner werden mitten im Spielfeld erzeugt. Da muss ich dann wohl ne komplett andere Position berechnen lassen.
Und wenn ich mich bewege, dann wirkt das ganze so gepresst, und die Blutlachen die fest aufm Boden sind sehen auch aus, als ob sie sich bewegen würden. Also, es sieht sehr komisch aus. Ist aber blöd zu beschrieben. Ich versuch mal irgendwie ein ScreenVid zu machen später.

Wegen der Maus:
Am Anfang stimmts noch. Dann aber wird sie wenn ich die Maus etwas schneller bewege und den Spieler bewege, immer ungenauer, steht also irgendwann etwa 20° neben dem SPieler. Oder wenn ich Vor dem Spieler bin mit der Maus, die Maus auf den SPieler zubewege und dann hinter den Spieler bewege, dreht sich der Spieler nicht mehr in diese Richtung mit.

So mein ich das.

Lg, M0rgenstern

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Okt 03, 2009 15:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du die Map zeichnest, dann die Spielerposition änderst und dann noch im selben Loop die Gegner und dynmische Flecken zeichnest, wirst du bewegende Flecken auf den Boden haben, da im selben gezeichnetem Frame unterschiedliche Zeit dargestellt wird. Im grunde einmal die Vergangenheit und einmal die Gegenwart. Aus diesem Grund sollten erst alle Usereingeben abgefragt und verarbeitet werden, dann erst das ganze zeichnen.

Zu der Maus hab ich nun zwei Theorien von Fehlern die du machst:

1: Wenn die Maus gezeichnet wird, entspricht dessen Koordinatenposition der Mitte der Maus. Wenn du nun ein Bild grabbst wo der Zeiger (also die Spitze der Maus) nicht in der Mitte des Bildes ist, wird ein Versatz drin sein. Du musst also dieses OFFSET mit in Atan2 einbeziehen, oder du grabbst gleich die Maus größer mit transparenten Teil nebenan um zu gewehrleisten, dass die Mausspitze auch in der Mitte des Bildes liegt, oder du erstellst gleich ein Maussymbol wo der Zeiger auch in der Mitte des Bildes sitzt. Also ein Kreuz oder so.

2: Deine von dir gemachte Mapposition wird von der Draw3D ja logischer Weise nicht berüksichtigt. Soll heissen, wenn die Map/der Spieler auf X=100/Y=50 steht, dann haben die Koordinaten MouseX3D/MouseY3D ja nicht automatisch X+100/Y+50 zu den sonstigen Werten. Das heisst, es gilt die tatsächlich eingezeichnete Bildschirmkoordinaten mit einzubeziehen. In deinem Fall wird dann SpielerWinkel=Atan2(MouseX3D,MouseY3D) das richtige sein. Eventuell noch -90°, +90° oder +180°, was aber von deinem Bildern abhängt.

Wenn es das nicht ist, dann kann ich dir aufgrund der spärlichen Problembeschreibung auch nicht weiter helfen. Dazu benötige ich dann den Code mit Mediadaten um es lauffähig auf mein System zu haben.

Wie per PN schon leicht angedeutet rate ich dir generell aber erst ein einfacheres Spiel zu programmieren. Wenn du schon mit den wirklich einfachsten Offsets, Dreisatz und Winkelberechnungen so ein Problem mit hast, solltest du erstmal was anderes machen. Ist nur ein gut gemeinter Rat von mir. Sonst frustet das ganze zu sehr.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

M0rgenstern

BeitragSa, Okt 03, 2009 16:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, ich hab jetzt mal alles hochgeladen.

https://www.blitzforum.de/upload/file.php?id=6996

Ich zeichne das ganze im selben Loop. Aber erst wird alles verarbeitet und dann alles gezeichnet.
Wegen der Maus, ich glaube, da liegts dran, dass ich eigentlich die SpielerPosition nicht mehr mit einberechnen dürfte.

Kannst die ja das agnze mal angucken, eventuell noch oben auf Vollbild umstellen, so hab ichs auch die ganze Zeit.

Lg, M0rgenstern

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Okt 03, 2009 16:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Weil du anscheinend nicht eines der zuletzt genannten Punkte von uns behoben oder angerührt hast, gebe ich dir nun nur die Codezeilen zu die du ändern musst damit alles 100%ig richtig funktioniert. Denn wenn ich dir jetzt den fertigen Code zuteile, wirst du nichts davon gelernt haben.

Codezeile : 124 ändern
Codezeile : 342 ändern
Codezeilen : 135 und 141 tauschen

Wenn du dann alles richtig gemacht hast, funktioniert sowohl die Spielerdrehung, das Mapscrolling als auch die Tastaturnavigation richtig. Wink
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

M0rgenstern

BeitragSo, Okt 04, 2009 9:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey.
Erstmal: Danke wegen den Zeilen 135 und 141... Das ist mir gar nicht aufgefallen (und nem Kumpel ders schon "gespielt" hat auch nicht^^).

Wegen den anderen Sachen:
Das mit der Maus funktioniert jetzt.
Ich musste noch die Begrenzungen für die SChüsse und den Spieler größer stellen, da das Feld in dem sich beides bewegen konnte (logischerweise) nur halb so groß war wie der Bildschirm, da ja alles noch auf die Hälfte (also ohne Scrolling) eingestellt war.

Die Zeile 342 hab ich jetzt so geändert:

Code: [AUSKLAPPEN]
DrawRect3D(GrasTile,0,0,(-Spieler\Px#),(-Spieler\Py#),1024,768)


Ich geh mal davon aus, dass das stimmt.

Wobei ich mir nicht ganz sicher bin.
Das ganze gescrolle (vor allem was die Blutflecken angeht) sieht immernoch sehr seltsam aus. Es sieht so aus, als würde der Boden sich unter den Flecken schneller bewegen als die Flecken selbst. Oder liegt das vielleicht an der Tile?
Denn wenn ich die Zeile 342 auskommentiere, dann sieht das ganze (auf schwarzem Untergrund) so aus, wie es aussehen soll.

Vielen Dank für deine Hilfe. Find ich besser, dass man mir sagt, wo meine Fehler liegen, anstatt dass man mir ausgebesserten Code vor die Nase wirft. Dann seh ichs wenigstens nochmal.

Lg, M0rgenstern

ToeB

BeitragSo, Okt 04, 2009 12:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich geb dir einen Tipp : Speicher die ScrollX/Y Koordinaten seperat ab. Also nicht direkt die Positionen des Spielers auf die Scroll Koordinaten beziehen. Was ist wenn der Spieler bzw. Tot ist ? Dann will man sichja weiter auf der Map bewegen können (rum gucken). Damit man dazu aber nicht den Player bewegen muss, speichert man die ScrollX/Y werte zwischen, und zwar sO :
Code: [AUSKLAPPEN]
;In der Schleife
ScrollX = player\Px#-GraphicsWidth/2.0
ScrollY = player\Py#+GraphicsHeight/2.0


Dann hast du den Player immer in der Mitte und kannst,wenn der Spieler toto ist, die Map zum beispiel anhand der MausXSpeed/YSpeed bewegen :
Code: [AUSKLAPPEN]
;Wenn der spieler tot ist
ScrollX = ScrollX + MouseXSpeed()
ScrollY = ScrollY + MouseYSpeed()
MoveMouse GraphcisWidth/2.0,GraphcisHeight/2.0


Dann musst du nur noch beim malen des Grasstiles folgendes machen :Code: [AUSKLAPPEN]
DrawRect3D(GrasTile,0,0,(-ScrollX),(-ScrollY),1024,768)


Auch kannst du damit ein nachziehen der "kamera" simulieren, aber ich denke das brauchst du alles nicht. Nur als tipp, mach es so wie ichs beschreieben habe, dann hast du hinterher keine Probleme mehr , wenn du etwas einbauen möchtest, was so nicht klappen kann..

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Okt 04, 2009 12:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hatte es wie folgt geändert:

124 Code: [AUSKLAPPEN]
   Spieler\PWinkel#=ATan2(-MouseX3D,-MouseY3D) ;Blickrichtung

342 Code: [AUSKLAPPEN]
   DrawRect3D(GrasTile,0,0,Spieler\Px#,-Spieler\Py#,1024,768,0,0,1)
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

M0rgenstern

BeitragSo, Okt 04, 2009 14:10
Antworten mit Zitat
Benutzer-Profile anzeigen
@ hectic. Bin jetzt bei nem Kumpel, hab das ganze Zeugs aber dabei, kanns also gleich mal ausprobieren. Dann kann ich dir bescheid sagen. Dankeschön.

@ Toeb.
Also, dass die Kamera nachzieht will ich nicht.
Und dass man die Kamera bewegen kann, wenn man tot ist, will ich auch nicht. Man soll sich nicht die Karte angucken können. Dann geht doch der Überraschungseffekt verloren.
Außerdem hab ich mir schon was lustiges überlegt, was passiert, wenn der Spieler tot ist. Dann wird man eh nichts mehr sehen^^

Lg, M0rgenstern

Edit1:
So... mehr Stress mit dem blöden PC vom Kumpel gehabt als gedacht.
Bin jetzt erst wieder da und kann das ändern.
Dieses eine Minuszeichen vor dem Spieler\Px... Dieses eine Zeichen hat das ausgemacht...
Vielen Dank Hectic.
Und auch Danke an die anderen^^

Lg, M0rgenstern

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group