Hilfe bei der Collision und geschwindigkeit

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Marvin133
Beiträge: 80
Registriert: 25.01.2010 15:51
Computerausstattung: Win 7 Home Premium 64 Bit \ PB 4.41 Demo\2.8Ghz QuadCore \4GB RAM\ nVidia GTS 250
Kontaktdaten:

Hilfe bei der Collision und geschwindigkeit

Beitrag von Marvin133 »

guten tag zusammen ich habe mit hilfe vieleer leute hier aus dem forum einn beta version des spiels jump or die programmiert.wen man zu sich zu erst bewegt klappt auch alles ganz flüssig nur wenn man den stern berührt harkt es sehr stark und ich vermute das an der collisions abfrage liegt nur ich kann mir den fehler inicht erklären.

Code: Alles auswählen

InitSprite()
InitSprite3D()
InitKeyboard()
InitSound()
InitMovie()

;Procedure Collision
Procedure BoxKolli(X1,Y1,W1,H1,  X2,Y2,W2,H2)
  If X1<X2+W2 And X1+W1>X2
    If Y1<Y2+H2 And Y1+H1>Y2
    ProcedureReturn 1
    EndIf
  EndIf
ProcedureReturn 0
EndProcedure


#W=16
#H=16
s=16
l=16



;Leveldaten
Dim Feld(#W,#H)
Dim solid(s,l)

For i=0 To 16 Step 1
 solid(i,11)=1
Next

;Variables
audio=100
Score=0


;Screen
ExamineDesktops()
OpenWindow(0,0,0,1024,768,"Basic Ghost v1.0")
OpenWindowedScreen(WindowID(0),0,0,1024,768,0,0,0)

;Sound
LoadSound(0,"sfx\flag.wav")
LoadMovie(0,"sfx\music\background.mp3")

;Jetzt brauchen wir noch ein paar Grafiken
LoadSprite(0,"gfx\player.bmp",0)
TransparentSpriteColor(0,$FFFFFF)

LoadSprite(1,"gfx\stone.bmp",0)
TransparentSpriteColor(1,$FFFFFF)


LoadSprite(2,"gfx\sun.bmp",0)
LoadSprite(20,"gfx\sun.bmp",#PB_Sprite_Texture)

LoadSprite(3,"gfx\door.bmp",0)
TransparentSpriteColor(3,$FFFFFF)

LoadSprite(4,"gfx\next-level.bmp",0)
TransparentSpriteColor(4,$FFFFFF)

CreateSprite3D(1,20)

;Die Variabeln für den Spieler
Define.l PlayerX,PlayerY;Position
Define.f MoveX,MoveY


PlayerW=SpriteWidth(0) ;Breite des Spielers
PlayerH=SpriteHeight(0);Höhe des Spielers

TileW=SpriteWidth(1) ;Breite eines Tiles
TileH=SpriteHeight(1);Höhe eines Tiles

Define.b OnGround;


For i=0 To 10 Step 1
PlayMovie(0,WindowID(0))
Next


Repeat
  
  ExamineKeyboard()
  Start3D()
  
  If IsScreenActive()
  ClearScreen(RGB(100,0,255))
  ExamineKeyboard()
 
    
    If KeyboardPushed(#PB_Key_Escape)
    End
    EndIf
   
 
    MoveX=0
    MoveY+0.5
    
    If KeyboardPushed(#PB_Key_Left)
    MoveX-5
    EndIf
    If KeyboardPushed(#PB_Key_Right)
    MoveX+5
    EndIf
   
    If OnGround
      If KeyboardPushed(#PB_Key_Space)
      MoveY=-15 ;Größerer Wert=Höherer Sprung
      PlaySound(0)
      EndIf
    EndIf
 
 

  ;Variables Player
  PlayerY+MoveY
  OnGround=0
  Hit=0
    
    
    ;***********Not Solid***********
    
    
    ;Collision Y
    
    For x=0 To #W
      For y=0 To #H
        If Feld(x,y)=1 
          If BoxKolli(x*TileW,y*TileH,TileW,TileH,PlayerX,PlayerY,PlayerW,PlayerH) ;
          Feld(x,y)=0
          Score=Score+1
          Hit=1
            If MoveY<0; 
            PlayerY=Y*TileH+TileH;Untere Seite
            ElseIf MoveY>0
            OnGround=1
            PlayerY=Y*TileH-PlayerH;Linke Seite
            EndIf
          EndIf
        EndIf
      Next y
    Next x
    If Hit=1
       MoveY=0
    EndIf

  ;Collision X 
  PlayerX+MoveX
  Hit=0
    For x=0 To #W
      For y=0 To #H
        If Feld(x,y)=1
          If BoxKolli(x*TileW,y*TileH,TileW,TileH,PlayerX,PlayerY,PlayerW,PlayerH)
          Hit=1
            If MoveX<0
            PlayerX=X*TileW+TileW
            ElseIf MoveX>0
            PlayerX=X*TileW-PlayerW
            EndIf
          EndIf
        EndIf
      Next y
    Next x
    If Hit=1
       MoveX=0
    EndIf
    
    
    
    ;***********Solid***********
    
    
    ;Colision Y
    
    For x=0 To s
      For y=0 To l
        If solid(x,y)=1 
          If BoxKolli(x*TileW,y*TileH,TileW,TileH,PlayerX,PlayerY,PlayerW,PlayerH)
              Hit=1
            If MoveY<0
            PlayerY=Y*TileH+TileH;Untere Seite
            ElseIf MoveY>0
            OnGround=1
            PlayerY=Y*TileH-PlayerH;Linke Seite
            EndIf
          EndIf
        EndIf
      Next y
    Next x
    If Hit=1
       MoveY=0
    EndIf

  ;Collision X
    For x=0 To s
      For y=0 To l
        If solid(x,y)=1
          If BoxKolli(x*TileW,y*TileH,TileW,TileH,PlayerX,PlayerY,PlayerW,PlayerH)
          Hit=1
            If MoveX<0
            PlayerX=X*TileW+TileW
            ElseIf MoveX>0
            PlayerX=X*TileW-PlayerW
            EndIf
          EndIf
        EndIf
      Next y
    Next x
    If Hit=1
    MoveX=0
    EndIf
 
    
    
    
    If SpriteCollision(0,PlayerX,PlayerY,3,800,650)=1
       
       DisplayTransparentSprite(4,500,500)
       
       For i=0 To 16 Step 1
         Feld(i,11)=1
       Next
       
       For i=0 To 9 Step 1
         Feld(i,9)=1
       Next
       
       For i=0 To 9 Step 1
         Feld(i,3)=1
       Next
    EndIf
    
 
    ;Draw solid
    For x=0 To s
      For y=0 To l
        Select solid(x,y)
          Case 0
          Case 1
          DisplayTransparentSprite(1,x*TileW,y*TileH)
        EndSelect
      Next y
    Next x


    ;Draw not solid
    For x=0 To #W
      For y=0 To #H
        Select Feld(x,y)
          Case 0
          Case 1
          DisplayTransparentSprite(1,x*TileW,y*TileH)
        EndSelect
      Next y
    Next x 


  ;Display Sprites
 
  DisplayTransparentSprite(0,PlayerX,PlayerY)
  
  DisplayTransparentSprite(3,800,650)
  
  DisplaySprite3D(1,100,100)
  RotateSprite3D(1,2, #PB_Relative)
  
  FlipBuffers()
  EndIf
  
  If KeyboardReleased(#PB_Key_PadEnter)
     PlayerY=32
  EndIf
 
  If KeyboardReleased(#PB_Key_Add)
     audio=audio+10
     MovieAudio(0,audio,0)
  If audio>=100
     audio=100
  EndIf
  EndIf   
  
    If KeyboardReleased(#PB_Key_PadEnter)
     PlayerY=32
  EndIf
 
  If KeyboardReleased(#PB_Key_Subtract)
     audio=audio-10
     MovieAudio(0,audio,0)
  If audio>=100
     audio=100
  EndIf
  EndIf  
  
  If KeyboardReleased(#PB_Key_R)
     For i=0 To 16 Step 1
       Feld(i,11)=1
     Next
     
     PlayerX=0
     PlayerY=0
     MoveY=0
     Score=0
  EndIf
  

  
ForEver
Win 7 Home Premium 64 Bit \ PB 4.41 Demo\2.8Ghz QuadCore \4GB RAM\ nVidia GTS 250

Bild
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Re: Hilfe bei der Collision und geschwindigkeit

Beitrag von Mok »

Probier's mal mit SpritePixelCollision()
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
Marvin133
Beiträge: 80
Registriert: 25.01.2010 15:51
Computerausstattung: Win 7 Home Premium 64 Bit \ PB 4.41 Demo\2.8Ghz QuadCore \4GB RAM\ nVidia GTS 250
Kontaktdaten:

Re: Hilfe bei der Collision und geschwindigkeit

Beitrag von Marvin133 »

Leider hab ich eine sprite collision nicht mit einr pb funktion benuttzt sondern eine eigene geschreieb nund ich wüsste nicht wie ich dei collisions abfrage für die ganze mpa machen könnte :(

Ich hoffe ihr habt ein paar einfälle

Mfg. Marvin 133 :D
Win 7 Home Premium 64 Bit \ PB 4.41 Demo\2.8Ghz QuadCore \4GB RAM\ nVidia GTS 250

Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Hilfe bei der Collision und geschwindigkeit

Beitrag von STARGÅTE »

Marvin133 hat geschrieben:wenn man den stern berührt harkt es sehr stark
Hm, um das zu bestätigen müssten wir den Code ausführen können, was ohne Grafik, Sound, ... nicht geht.

Außerdem was heißt bei dir "harkt es sehr stark"?
- Weil die FPS runtergehen ?
- Weil die Sprites "ruckeln", weil sie dauern verschoben werden ?
- ... ?
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Marvin133
Beiträge: 80
Registriert: 25.01.2010 15:51
Computerausstattung: Win 7 Home Premium 64 Bit \ PB 4.41 Demo\2.8Ghz QuadCore \4GB RAM\ nVidia GTS 250
Kontaktdaten:

Re: Hilfe bei der Collision und geschwindigkeit

Beitrag von Marvin133 »

es laggt nicht weil dir fps sich senken, sondern weil sich die collision immer kurz aufhäng und ab und zu kann man sich nicht bewegen.

in etwas so,nachdem hinter einer collisions abfrage ein delay(1000) setzt.

hier ist der link zum source und sprites:


http://em.q-soft.ch/files/get/k-KHI2v7r ... -ghost.zip
Zuletzt geändert von Marvin133 am 09.04.2010 22:47, insgesamt 1-mal geändert.
Win 7 Home Premium 64 Bit \ PB 4.41 Demo\2.8Ghz QuadCore \4GB RAM\ nVidia GTS 250

Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Hilfe bei der Collision und geschwindigkeit

Beitrag von ts-soft »

Die Rechtschreibung sollte zumindest soweit stimmen, das Dein Beitrag verstanden werden kann.
Dieser Kauderwelsch ist unverständlich. Also, bitte mehr Mühe geben.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Marvin133
Beiträge: 80
Registriert: 25.01.2010 15:51
Computerausstattung: Win 7 Home Premium 64 Bit \ PB 4.41 Demo\2.8Ghz QuadCore \4GB RAM\ nVidia GTS 250
Kontaktdaten:

Re: Hilfe bei der Collision und geschwindigkeit

Beitrag von Marvin133 »

Ich vermute mal das es an der collision der x achse liegt und zwar von not solid elementen.Aber trotzdem weis ich nicht woran es liegt :(

Bitte versuch doch einmal den fehler zu finden oder mir zu helfen. :mrgreen:

Mfg. Marvin133
Win 7 Home Premium 64 Bit \ PB 4.41 Demo\2.8Ghz QuadCore \4GB RAM\ nVidia GTS 250

Bild
Antworten