Verfasst: 17.01.2007 17:25
so, nochn bissel rumgeposselt....
der block an anfang ist nur zum erzeugen der sprites, hab ich auch noch mal in den code geschrieben.
genausogut kannst du 16 Animationsframes laden, die du in nem 3D-Modeller erzeugt hast.
ich arbeite hier nicht mit nem Array, sondern mit 16 sprites, die direkt hintereinanderliegen.
genausogut könntest du die sprites relativ laden, und die IDs in ein Array packen.
den Hintergrundblock hab ich mal doppelt so groß gemacht,
wenn du das mit dem vorigen beispiel vergleichst,
kannst du bestimmt gut die grundlagen rausarbeiten.
die steuerung hab ichn bissel aufgepeppt, hier jetzt mit beschleunigung.
wie vorher:
weil der hintergrund bewegt wird und nicht das sprite, sind die tasten links/rechts bzw. oben/unten vertauscht.
der block an anfang ist nur zum erzeugen der sprites, hab ich auch noch mal in den code geschrieben.
genausogut kannst du 16 Animationsframes laden, die du in nem 3D-Modeller erzeugt hast.
ich arbeite hier nicht mit nem Array, sondern mit 16 sprites, die direkt hintereinanderliegen.
genausogut könntest du die sprites relativ laden, und die IDs in ein Array packen.
den Hintergrundblock hab ich mal doppelt so groß gemacht,
wenn du das mit dem vorigen beispiel vergleichst,
kannst du bestimmt gut die grundlagen rausarbeiten.
die steuerung hab ichn bissel aufgepeppt, hier jetzt mit beschleunigung.
wie vorher:
weil der hintergrund bewegt wird und nicht das sprite, sind die tasten links/rechts bzw. oben/unten vertauscht.
Code: Alles auswählen
InitSprite()
InitKeyboard()
OpenWindow(0,0,0,640,480,"Background-Tiles-Demo", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(0),0,0,640,480,0,0,0)
#AnimFrames = 16 ; 16 versch. Anim-Frames
#AnimStart = 1 ; erstes Sprite der Animation
;{ der ganze kram hier in diesem kommentarblock
; dient nur zum erzeugen der sprites
; wenn die sprites geladen werden,
; entfällt dieser block komplett.
CreateSprite(0,160,160) ; hintergrund-tile
StartDrawing(SpriteOutput(0))
Box(0,0,160,160,$200810)
For n=0 To 79
Plot(2*n,Random(159),Random($FFFFFF))
Next
StopDrawing()
TransparentSpriteColor(-1,$FF00FF)
For Anim=0 To #AnimFrames-1
CreateSprite(#AnimStart+Anim,80,80)
StartDrawing(SpriteOutput(#AnimStart+Anim))
Box(0,0,80,80,$FF00FF)
For n=0 To 60
LineXY(39, n,78-n/2,79,RGB(120+2*n,60+n,30+n/2))
LineXY(39, n, n/2,79,RGB(120+2*n,60+n,30+n/2))
Next
; und nun das, was sich wirklich verändert von Frame zu Frame
X1 = 39 + 30 * Sin( #PI * Anim / 16 )
Y1 = 39 + 30 * Cos( #PI * Anim / 16 )
X2 = 39 - 30 * Sin( #PI * Anim / 16 )
Y2 = 39 - 30 * Cos( #PI * Anim / 16 )
Circle(39,39,6,$008080)
LineXY(X1,Y1,X2,Y2,$00C0C0)
Circle(X1,Y1,6,$00FFFF)
Circle(X2,Y2,6,$00FFFF)
StopDrawing()
Next
;}
BackX.f = 0
BackY.f = 0
MoveX.f = 0
MoveY.f = 0
Repeat
ExamineKeyboard()
event = WindowEvent()
ClearScreen(0)
If KeyboardPushed(#PB_Key_Right)
MoveX -0.2 : If MoveX < -4 : MoveX = -4 : EndIf
EndIf
If KeyboardPushed(#PB_Key_Left)
MoveX +0.2 : If MoveX > 4 : MoveX = 4 : EndIf
EndIf
If MoveX < 0 : MoveX +0.1 : EndIf
If MoveX > 0 : MoveX -0.1 : EndIf
If KeyboardPushed(#PB_Key_Down)
MoveY -0.2 : If MoveY < -3 : MoveY = -3 : EndIf
EndIf
If KeyboardPushed(#PB_Key_Up)
MoveY +0.2 : If MoveY > 5 : MoveY = 5 : EndIf
EndIf
If MoveY < 1 : MoveY +0.1 : EndIf
If MoveY > 1 : MoveY -0.1 : EndIf
BackX + MoveX
If BackX < 0 : BackX + 160 : EndIf
If BackX > 159 : BackX - 160 : EndIf
BackY + MoveY
If BackY < 0 : BackY + 160 : EndIf
If BackY > 159 : BackY - 160 : EndIf
For t=0 To 3 ; 480/160 = 3 , einer mehr = 4
For n=0 To 4 ; 640/160 = 4 , einer mehr = 5
DisplaySprite(0, 160*n -160 + BackX, 160*t -160 + BackY)
Next
Next
Anim+1: If Anim>#AnimFrames-1 : Anim = 0 : EndIf
DisplayTransparentSprite(#AnimStart+Anim,280,360)
FlipBuffers()
Until event = #PB_Event_CloseWindow