Aktuelle Zeit: 18.01.2019 11:44

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Sprung eines Sprites simulieren
BeitragVerfasst: 03.04.2010 12:22 
Offline
Benutzeravatar

Registriert: 25.01.2010 15:51
Ich hatte schon ein mal ein thema aufgemacht wo dies besprochen wurde nur leider wurde das gelöscht und ich habe vergessen wie das geht falls jemand eine lösung dazu hat bitte posten ich habe es verscuht mir ner forschleife aber leider ist mir das nicht richtig gelungen :( .
es soll so sein das das sprite für eine gewisse zeit um eine bestimmte zahl an pixeln nach oben verschoben werden soll und wenn sich nach links oder rwechts beweg im sinus kurve nach unten wieder fallen soll.

Mit freundlichen grüßen Marvin133 :)

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

Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprung eines sprites simulieren
BeitragVerfasst: 03.04.2010 13:02 
Offline

Registriert: 10.11.2004 03:22
Marvin133 hat geschrieben:
Ich hatte schon ein mal ein thema aufgemacht wo dies besprochen wurde nur leider wurde das gelöscht

:?

du wurdest x-mal aufgefordert, den Titel auf einen Sinnvollen zu ändern, was dir dann schließlich ein Admin abgenommen hat.
viewtopic.php?f=3&t=22080&p=268767#p268767
also erstmal deine eigenen Postings durchsuchen, so viele sind das schließlich nicht, bevor du irgendwelche Behauptungen aufstellst.

_________________
... machts gut und danke für den fisch ...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprung eines sprites simulieren
BeitragVerfasst: 03.04.2010 22:01 
Offline
Benutzeravatar

Registriert: 25.01.2010 15:51
Sorry für die Beschuldigung.

und dnkae das du mirr den link zu topic gegeben hast.

nun habe ich aber ein weiteres probelem ich will dass wenn das sprite ein andrese überlabt dann da drüber stehen bleibt,also wenn ich zum beispiel auf einen stein springen und dann oben auf dem stein stehen bleibe.


Code:
InitSprite()
InitKeyboard()
InitSound()


;Variables
activate=1

Global player_x.f = 100 , player_y.f = 500

#JumpSpeed = 50 : #JumpHeight = 200


Structure ground
x.i
y.i
img.i
EndStructure


Dim tiles.ground(32,32)
 
    tiles(0,0)\x   = 100
    tiles(0,0)\y   = 400
    tiles(0,0)\img = 1
;Window
OpenWindow(0,100,100,1024,768,"Basic")
OpenWindowedScreen(WindowID(0),0,0,1024,768,0,0,0)

;Image
CreateSprite(0, 50, 50)
  StartDrawing(SpriteOutput(0))
    Box(0,0,50,50,0)
  StopDrawing()

;Load
LoadSound(1,"flag.wav")
LoadSprite(1,"gfx\stone.bmp",0)


;Main Loop
While activate=1
ExamineKeyboard()
ClearScreen(RGB(255,255,255))



If Jump : Jump - 1 : EndIf
   
   
   DisplaySprite( 0, player_x, player_y-Sin(Jump*#PI/#JumpSpeed)*#JumpHeight)
   DisplaySprite( 1, tiles(0,0)\x, tiles(0,0)\y)

FlipBuffers()

If KeyboardReleased(#PB_Key_Space) And Not Jump : Jump = #JumpSpeed : PlaySound(1) : EndIf

If KeyboardPushed(#PB_Key_Left)
   player_x=player_x-5
If player_x<0
   player_x=1020
EndIf
EndIf

If KeyboardPushed(#PB_Key_Right)
   player_x=player_x+5
If player_x>1024
   player_x=0
EndIf
EndIf


If SpritePixelCollision( 0, player_x, player_y, img, tiles(0,0)\x, tiles(0,0)\y) =1
   player_y=tiles(0,0)\y-50
EndIf



If KeyboardReleased(#PB_Key_Escape)
   activate=0
   End
EndIf

Wend

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

Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprung eines sprites simulieren
BeitragVerfasst: 03.04.2010 22:33 
Offline

Registriert: 10.11.2004 03:22
konzipiere komplett um!
deine statischen Objekte müssen in einer Tilemap stehen, auf die kannst du deine Spielfigur oben aufsitzen lassen.
eine Tilemap kann halbwegs dynamisch sein, also wie z.b. die Felsen in "Boulder Dash"...
nur wirklich dynamische Objekte, also schnelle Gegner, sind über dieser Tilemap, und denen wirst du kaum auf dem Kopf stehen wollen.

schaffe dir mehr Basiswissen über dieses Genre.
es sind schon eine Menge Grundlösungen gepostet worden im Laufe der Jahre.
lies vielleicht auch mal ein Buch oder ein Tutrial im Netz.
häng dich dabei an den Algorithmen auf.
wenn du sie verstehst bist du nicht auf die C-Beispiele angewiesen sondern kannst es direkt in PB selber umsetzen.
wenn du sie nicht verstehst, solltest du sowieso deine Ansprüche runterschrauben.

PB ist zwar sehr Game-freundlich, aber ist kein Game-Maker.

_________________
... machts gut und danke für den fisch ...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprung eines sprites simulieren
BeitragVerfasst: 04.04.2010 15:14 
Offline
Benutzeravatar

Registriert: 25.01.2010 15:51
irgendwie klappt es dennoch nicht

Code:
InitSprite()
InitKeyboard()
InitSound()


;Variables
activate=1

Global player_x.f = 100 , player_y.f = 650

#JumpSpeed = 50 : #JumpHeight = 200


Dim Map(100,100)


For n = 0 To 100
  For t = 0 To 100
    Map(n,t) = 1
  Next
Next

;Window
OpenWindow(0,100,100,1024,768,"Basic")
OpenWindowedScreen(WindowID(0),0,0,1024,768,0,0,0)


;Load
LoadSound(1,"sfx\flag.wav")
LoadSprite(1,"gfx\player.bmp",0)
LoadSprite(2,"gfx\stone.bmp",0)

;Create

TransparentSpriteColor(1,$FFFFFF)



;Main Loop
While activate=1
ExamineKeyboard()
ClearScreen(RGB(150,0,255))





  For SY=0 To 30
    For SX = 0 To 20
      DisplaySprite(2, 16*SX - FineX , 16*SY - FineY )
    Next
  Next
 





If Jump : Jump - 1 : EndIf
DisplaySprite( 1, player_x, player_y-Sin(Jump*#PI/#JumpSpeed)*#JumpHeight)
   

FlipBuffers()

If KeyboardReleased(#PB_Key_Space) And Not Jump : Jump = #JumpSpeed : PlaySound(1) : EndIf



If KeyboardPushed(#PB_Key_Left)
   player_x=player_x-5
If player_x<0
   player_x=1020
EndIf
EndIf



If KeyboardPushed(#PB_Key_Right)
   player_x=player_x+5
If player_x>1024
   player_x=0
EndIf
EndIf



If SpriteCollision(1,2,2,2,2,2)=1
   player_y=player_y-10
EndIf



If KeyboardReleased(#PB_Key_Escape)
   activate=0
   End
EndIf





Wend

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

Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprung eines sprites simulieren
BeitragVerfasst: 04.04.2010 17:59 
Offline
Benutzeravatar

Registriert: 25.01.2010 15:51
ich habe jetz schon vieles versucht aber immer missglückt es mit tile map habe ich jetzt aber schon ,nur mit einem stein erst mal zu m testen

Code:
InitSprite()
InitKeyboard()
InitSound()
InitMovie()


;Variables
activate=1

Structure tile
x.i
y.i
EndStructure

Global player_x.f = 100 , player_y.f = 650


#JumpSpeed = 50 : #JumpHeight = 200

Dim tiles.tile(100)
Dim value.s(10)


OpenFile(0,"Data\level.txt")
   FileSeek(0,0)
      value.s(0)  = ReadString(0)
   FileSeek(0,4)
      value.s(1)  = ReadString(0)
CloseFile(0)
   
   tiles(0)\x=    Val(value.s(0))
   tiles(0)\y=    Val(value.s(1))

;Window
OpenWindow(0,100,100,1024,768,"Basic")
OpenWindowedScreen(WindowID(0),0,0,1024,768,0,0,0)


;Load
LoadSound(1,"sfx\flag.wav")
LoadSprite(1,"gfx\player.bmp",0)
LoadSprite(2,"gfx\stone.bmp",0)

;Create

TransparentSpriteColor(2,$FFFFFF)



;Main Loop
While activate=1



ExamineKeyboard()
ClearScreen(RGB(150,0,255))

SetFrameRate(60)

DisplaySprite( 2, tiles(0)\x , tiles(0)\y )
DisplaySprite( 1, player_x, player_y-Sin(Jump*#PI/#JumpSpeed)*#JumpHeight)


FlipBuffers()


If Jump : Jump - 1 : EndIf



If KeyboardReleased(#PB_Key_Space) And Not Jump : Jump = #JumpSpeed : PlaySound(1) : EndIf



If KeyboardPushed(#PB_Key_Left)
   player_x=player_x-5
If player_x<0
   player_x=1020
EndIf
EndIf



If KeyboardPushed(#PB_Key_Right)
   player_x=player_x+5
If player_x>1024
   player_x=0
EndIf
EndIf





If KeyboardReleased(#PB_Key_Escape)
   activate=0
   End
EndIf





Wend


ich hogffe ihr könnt den fehle endecken

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

Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprung eines sprites simulieren
BeitragVerfasst: 05.04.2010 15:05 
Offline
Benutzeravatar

Registriert: 04.02.2008 16:51
Ich hab dir mal ein kompettes Beispiel geschreiben. (Sowohl für Tilemap, als auch fürs Springen). Dabei verwende ich eine andere Formel für den Sprung (Sei mir jetzt nicht böse STARGÅTE). Am besten einfach mal ein paar Werte verändern und Teile auskommentieren um zu sehen was genau sie bewirken.
Code:
;Für dieses Beispiel brauche ich Bilder (Sprites)
;und die Tastatur (Keybard)

InitSprite()
InitKeyboard()

;Procedure zum prüfen ob zwei Rechtecke kollidieren
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

;Wer erstellen erstmal eine Karte
;So brauchen wir übringends keine extra Dateien
#W=10
#H=10

#TileW=64;Breite eines Tiles
#TileH=64;Höhe eines Tiles

#PlayerW=64;Breite des Spielers
#PlayerH=64;Höhe des Spielers
Dim Feld(#W,#H)

  For a=0 To 10
  Feld(a,10)=1
  Next a
 
  For a=5 To 10
  Feld(a,6)=1
  Next a
 
Feld(8,9)=1

;Wir öffnen ein Vollbild mit der Auflösung des Desktops
ExamineDesktops()
OpenScreen(DesktopWidth(0),DesktopHeight(0),DesktopDepth(0),"Jump and Run - Test")


;Jetzt brauchen wir noch ein paar Grafiken
CreateSprite(0,#PlayerW,#PlayerH)
StartDrawing(SpriteOutput(0))
Box(0,0,#PlayerW,#PlayerH,RGB(0,0,255))
StopDrawing()


CreateSprite(1,#TileW,#TileH)
StartDrawing(SpriteOutput(1))
Box(0,0,#TileW,#TileH,RGB(128,128,128))
StopDrawing()


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

Define.b OnGround;Ist der Spieler auf dem Boden?
Repeat
  If IsScreenActive()
  ClearScreen(0)
  ExamineKeyboard()
 
    ;Beenden
    If KeyboardPushed(#PB_Key_Escape)
    End
    EndIf
   
 
  MoveX=0;Mann könnte auch *0.9 oder so schreiben.
  ;Dann würde der Spieler rutschen
 
  ;Jetzt kommt Physik ins Spiel. MoveY ist die
  ;aktuelle Geschwindigkeit. Diese ändert sich
  ;jedes mal um einen Konstanten Wert, wenn ein
  ;Objekt fällt. Um Aufprall usw. kümmern wir
  ;uns später
 
  MoveY+0.5
    ;Bewegen
    If KeyboardPushed(#PB_Key_Left)
    MoveX-5
    EndIf
    If KeyboardPushed(#PB_Key_Right)
    MoveX+5
    EndIf
   
    If OnGround
      If KeyboardPushed(#PB_Key_Space)
      MoveY=-20 ;Größerer Wert=Höherer Sprung
      EndIf
    EndIf
 
 
  ;Wir bewegen den Spieler (Position wird nachher korregiert)
  ;Der folgende Code mag verwirrend erscheinend.
  ;Um es mal leicht zu machen
  ;Wir verschieben einfach den Spieler.
  ;Steckt er dann in einer Wand fest setzten wir ihn einfach
  ;vor die Mauer
  PlayerY+MoveY
  OnGround=0
  Hit=0
    For x=0 To #W
      For y=0 To #H
        If Feld(x,y)=1 ;Ist das Feld eine Mauer (einzige Hinderniss)
          If BoxKolli(x*#TileW,y*#TileH,#TileW,#TileH,PlayerX,PlayerY,#PlayerW,#PlayerH) ;Ist der Spieler in der Mauer
          Hit=1;Der Spieler kollidiert mit einem Hinderniss
            If MoveY<0; Diese überprüfen ist wichtig, sonst wüsten wir nicht auf
            ;welche Seite der Mauer wir den Spieler setzen müssen.
            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; Würden wir MoveY nicht auf 0 setzten würde
    ;der Spieler jetzt über einen Abgrund laufen, würde
    ;er Schlagartig runterfallen.
    EndIf

  ;Das gleiche noch einmal für die X-Achse 
  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
 
 
 
  ;Wir zeichnen die Tilemap
  ;Was du benutzt ist keine Tilemap
  ;0=Leeres Feld
  ;1=Mauer
  ;Wir gehen jedes Feld durch
    For x=0 To #W
      For y=0 To #H
      ;Wir prüfen was im Feld ist
        Select Feld(x,y)
          Case 0;Ein leeres Feld
          ;Ein leeres Feld brauchen wir nicht anzuzeigen
          Case 1;Eine Mauer
          ;und zeichnen es.
          DisplaySprite(1,x*#TileW,y*#TileH)
        EndSelect
      ;Man könnte hier auch noch andere Felder hinzufügen
      ;Zum Beispiel Lava oder so
      Next y
    Next x
 
  ;Jeztzt zeichnen wir noch unseren Spieler
  ;(Blauer Kasten) 
 
  DisplaySprite(0,PlayerX,PlayerY)
 
  EndIf
FlipBuffers()
ForEver

PS: Du kannst die Kollisionsrutine auch für unterschiedlich große Objekte verwenden und für welche die nicht in einer Tilemap sind

_________________
Windows XP: PB 4.31, PB 4.4, PB 4.51
Open Suse 11.2: PB 4.4


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprung eines sprites simulieren
BeitragVerfasst: 05.04.2010 15:26 
Offline
Benutzeravatar

Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte
Klasse Beispiel kswb73! :allright:

All die Jahre hab' ich diverse mal angefangen ein Jump 'N' Run zu programmieren bin aber immer an der Kollision gescheitert. Jetzt kriege ich wieder Bock mal ein paar alte Projekte rauszukramen. <)

** Lesezeichen setz **

_________________
Windows 10 Pro, 64-Bit / Outtakes | Derek


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprung eines sprites simulieren
BeitragVerfasst: 05.04.2010 15:36 
Offline

Registriert: 10.11.2004 03:22
sehr schönes Beispiel, wirklich.
zu der Tileengine, sieh dir mal maine alte an:
viewtopic.php?p=116634#p116634

erstens wird man wahrscheinlich sowieso einen Hintergrund haben wollen, nicht einfach ein schwarzes Bild,
zweitens ist es einfach schneller wenn man im Array direkt die Spritenummer drin stehen hat und sich nicht mir cases rumschlägt.

_________________
... machts gut und danke für den fisch ...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprung eines sprites simulieren
BeitragVerfasst: 05.04.2010 18:31 
Offline
Benutzeravatar

Registriert: 25.01.2010 15:51
Vielen Dank genau das habe ich gesucht :allright:

ist echt klassen von euch das ihr mir geholfen habt großes lob an euch.nur ich habe noch ein frage ich lades alle werte für die tile map aus einer datei wie kann ich aber in die nächste zeile der datei springen um dort den wert auszulesen?

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

Bild


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: Majestic-12 [Bot] und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye