
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

Marvin133 hat geschrieben:Ich hatte schon ein mal ein thema aufgemacht wo dies besprochen wurde nur leider wurde das gelöscht
Code: Alles auswählen
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
Code: Alles auswählen
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
Code: Alles auswählen
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
Code: Alles auswählen
;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