Seite 2 von 3

Verfasst: 17.01.2007 17:25
von Kaeru Gaman
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.

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

Verfasst: 17.01.2007 17:27
von Zero_Cool
Perfekt :-) Genau das habe ich gesucht! So, ab jetzt sollte ich alleine zurecht kommen :-) Hoffe ich ;-) Nochmals danke für die Hilfe! Vielleicht kann ich ja schon bald mal eine Demo posten :-)

Verfasst: 17.01.2007 19:14
von #NULL
@KG
solche demos finde ich immer wieder klasse :allright:

Verfasst: 19.01.2007 23:07
von Zero_Cool
Hello Zusammen

Habe mir das Beispiel oben mal genau angesehen!

Ich habe nun versucht, das Beispiel für meine Zwecke ab zu ändern! Leider kommen da immer nur Fehlermeldungen raus :oops:

Daher brauche ich wieder mal eure Hilfe, wäre echt froh! Beim Beispiel oben, wird ja der Sprite Inhalt mittels Quelltext direkt erstellt, wie sollte der Code nun aussehen, wenn ich z.b. 10 jpeg Bilder habe, welche nacheinander an der gleichen Stelle ( gleiches Sprite, einfach aktualisiert ) dargestellt werden sollen? Kann ich die Geschwindikeit selbst definieren, mit welcher sich selbst aktualisieren?

In der Praxis habe ich mir das so vorgestellt! Ich habe ein Sprite, sagen wir 20 x 20 Pixel gross, nun sollten nacheinander auf diesem Sprite die 10 einzelnen JPEG-Bilder dargestellt werden... eigentlich auf gut deutsch, eine Animation.

Danke für die Hilfe!

Verfasst: 19.01.2007 23:54
von Kaeru Gaman
dafür hab ich den kompletten blcok ja mit kommentar umklammert.

es ist eigentlich egal, ob du innerhalb der schleife

Code: Alles auswählen

For Anim=0 To #AnimFrames-1 
nur sprites erzeugst

Code: Alles auswählen

 CreateSprite(#AnimStart+Anim,80,80) 
oder diese von platte einlädst

Code: Alles auswählen

LoadSprite(#AnimStart+Anim,"Sprite"+Str(Anim)+".bmp")

Verfasst: 21.01.2007 01:11
von Zero_Cool
Hello Hello :-)

Stimmt, wieso bin ich da nicht selbst drauf gekommen! Danke!

Habe aber schon das nächste Problem! Habe in einem Tutorial folgenden Code gefunden, leider kann mein Pure Basic (4er Version) nix mit diesem Code, anfangen. Es kommt immer folgende Fehlermeldung:

Code:

Code: Alles auswählen

Procedure AddEnemy(x, y, speedX, speedY, armor)
  AddElement(enemy())  
  enemy()\x = x
  enemy()\y = y
  enemy()\speedX = speedX
  enemy()\speedY = speedY
  enemy()\armor = armor 
EndProcedure
Fehler:
enemy () is not a function, array, macro or linked list!

Wenn ich "AddEnemy" in "enemy" ändere, springt er eine Zeile weiter dort gibt er aber eine Fehlermeldung aus, das die Anzahl Variablen nicht korrekt sind...

Mache ich was falsch, oder wo könnte das Problem liegen?

Schöner Abend!

Verfasst: 21.01.2007 01:20
von edel
Seit 4.0 sind die Listen nicht mehr global.

Code: Alles auswählen

global newlist enemy.structure()

Verfasst: 21.01.2007 01:29
von Zero_Cool
Hallo,

Danke für die Antwort! Scheine gerade ein wenig auf dem Schlauch zu stehen, ich bin teste gerade ein bisschen an meinem Spiel rum, nur leider bin ich mir nicht sicher was ich mit "global newlist enemy.structure()" genau anstellen soll, mehr als Fehlermeldungen bringe ich auch hier nicht zu Stande... wie genau muss dieser Code eingesetzt werden?

Verfasst: 21.01.2007 01:49
von edel
Benutz mal PB Source-Converter v.1.0.9.

Es muss nicht viel geaendert werden, aber gerade als Anfaenger
nimmt dir das Programm etwas Arbeit ab.

Verfasst: 21.01.2007 02:04
von Zero_Cool
Danke für den Tip! Ich glaube aber ich muss wieder eine Stufe nach unten. Irgendwie klappt das auch mit dem Converter nicht. Der Code bleibt immer der selbe... irgendwie verstehe ich nicht, was ich falsch mache. Scahde, an so nem kleinen Mist zu "scheitern"! Danke für die Hilfe!