Bewegungs Animation von Figur (2D Spiel)

Anfängerfragen zum Programmieren mit PureBasic.
MauMau91
Beiträge: 2
Registriert: 11.09.2011 14:40

Bewegungs Animation von Figur (2D Spiel)

Beitrag von MauMau91 »

Hi,

hab vor kurzem mit PB angefangen. Hab nach dem siebten Kapitel ("Schleifen und das erste kleine Spiel") versucht ein wenig kreativ zu sein, und meine eigene Figur (.bmp - Datei) über den Bildschirm zu bewegen, was an sich kein problem war.
Das Spriet lässt sich zwar bewegen allerdings will ich daraus jetzt ne Animation machen, damit meine Figur auch wirklich "geht" oder es zumindest so aussieht.
Genau da ist mein Problem: Wie baue ich eine Animation ein? Wäre auch gut zu wissen wie ich ein Sprite durch ein anderes ersetze damit "Clive" (hab die Figur so getauft :wink: ) auch in eine andere Richtung schaut, wenn er nach rechts, links oder nach oben geht.

Hier is das vorläufige Script:

______________

Code: Alles auswählen

InitSprite()
InitKeyboard()
OpenScreen(800,600,32,"erstes Spiel")

Global Sprite1X.w
Global Sprite1Y.w


LoadSprite(1,"C:\Erster Versuch\Textures\clive.bmp",0)

Sprite1X = 399
Sprite1Y = 299

Repeat
  FlipBuffers()
  ClearScreen(255+256*255+256*256*255)
  ExamineKeyboard()
  DisplayTransparentSprite(1,Sprite1X,Sprite1Y)
If KeyboardPushed(#PB_Key_Escape)                
    End                                                
  EndIf


ExamineKeyboard()
If KeyboardPushed(#PB_Key_Up)
  Sprite1Y - 1
EndIf
If KeyboardPushed(#PB_Key_Down)
  Sprite1Y + 1
EndIf
If KeyboardPushed(#PB_Key_Left)
  Sprite1X - 1
EndIf
If KeyboardPushed(#PB_Key_Right)
  Sprite1X + 1
EndIf
ForEver
______________________

Vielen Dank schon mal im Voraus für Hinweise und Hilfe jegdlicher Art. Tut mir übrigens Leid wenn die Frage bereits einer gestellt hat und mir dat net aufgefallen ist :roll: ;) .

MFG

__________________________________________________
Code-Tags hinzugefügt
11.09.2011
RSBasic
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Bewegungs Animation von Figur (2D Spiel)

Beitrag von Danilo »

Du kannst ein .bmp machen in denen mehre Clives drin sind. Dann lädst Du es und
wählst mit ClipSprite(#Sprite,x,y,Width,Height) den Bereich aus, der vom .bmp
angezeigt werden soll.

Oder Du machst z.B. ein Array mit "Dim Clive(n)" und lädst dann mehrere .bmps
dort rein. Dann zeigst Du mit DisplayTransparentSprite(Clive(nr),x,y) das Bild an,
welches Du gerade möchtest.

Eine Forensuche mit dem Stichwort "AnimSprite" sollte Dir auch weiter helfen.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
MauMau91
Beiträge: 2
Registriert: 11.09.2011 14:40

Re: Bewegungs Animation von Figur (2D Spiel)

Beitrag von MauMau91 »

Danke für den Tip mit dem ClipSprite() :D
Aber wie baue Ich eine Schleife ein in der die beiden clips immer wieder nach einer bestimmten Zeit ausgetauscht werden?

Insgesamt sind in der Bmp drei Zeichnungen, wann immer ich allerdings in eine bestimmte Richtung drücke (Im Moment hab mich nur auf eine Animation beschränkt die einen "Gang" nach unten beschreibt - also zum Bildschirm) ersetzt PB den ersten clip mit dem zweiten und sobald Ich loslasse genau umgekehrt *was schon mal ein Anfang ist*.
Allerdings wird der dritte Clip nicht genutzt.

Skript:

Code: Alles auswählen

InitSprite()
InitKeyboard()
OpenScreen(800,600,32,"erstes Spiel")

Global Sprite1X.w
Global Sprite1Y.w


LoadSprite(1,"C:\Erster Versuch\Textures\clivewalksforward.bmp",0)
ClipSprite(1,0,0,29,59); [color=#0040FF]hier klappt alles soweit, er lädt diesen Bereich der Bitmap und zeigt ihn auch vernünftig[/color]


Sprite1X = 399
Sprite1Y = 299

Repeat
  FlipBuffers()
  ClearScreen(255+256*255+256*256*255)
  ExamineKeyboard()
  DisplayTransparentSprite(1,Sprite1X,Sprite1Y)
  If KeyboardPushed(#PB_Key_Escape)
    End                           
  EndIf



ExamineKeyboard()
If KeyboardPushed(#PB_Key_Up)
  Sprite1Y - 1
EndIf
If KeyboardPushed(#PB_Key_Down)
  Sprite1Y + 1
  ClipSprite(1,40,0,29,59); [color=#0040FF]hier allerdings zeigt er, sobald Ich den Pfeil nach unten drück, nur einen der beiden Clips an. Gibt es irgendeinen Befehl um die Clips nach einer bestimmten Zeit zu tauschen?[/color]
  ClipSprite(1,77,0,29,59)
Else
  ClipSprite(1,0,0,29,59)
EndIf
If KeyboardPushed(#PB_Key_Left)
  Sprite1X - 1
EndIf
If KeyboardPushed(#PB_Key_Right)
  Sprite1X + 1
EndIf
ForEver
Kann man an die Beiträge auch Bilder anheften? Dann ließe sich das wesentlich einfacher demonstrieren

P.S.
Hab mich auch mal nach der Array Idee umgesehen, und anderen Foreneinträgen. Hat mir bisher allerdings noch net so geholfen :( .

Grüße und Dankeschön,
MauMau

Edit by NicTheQuick: Code-Tags gesetzt. Bitte in Zukunft daran denken! Im Übrigen ist PB keine Skriptsprache. :wink:
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Bewegungs Animation von Figur (2D Spiel)

Beitrag von Danilo »

MauMau91 hat geschrieben:Danke für den Tip mit dem ClipSprite() :D
Aber wie baue Ich eine Schleife ein in der die beiden clips immer wieder nach einer bestimmten Zeit ausgetauscht werden?
Du könntest das für den Anfang mit einem Flag machen, welches alle X Millisekunden
gesetzt wird. Zum Beispiel so:

Code: Alles auswählen

InitSprite()
InitKeyboard()
OpenScreen(800,600,32,"erstes Spiel")

Global Sprite1X.w
Global Sprite1Y.w

LoadSprite(1,"C:\Erster Versuch\Textures\clivewalksforward.bmp",0)

ClipSprite(1,0,0,29,59); [color=#0040FF]hier klappt alles soweit, er lädt diesen Bereich der Bitmap und zeigt ihn auch vernünftig[/color]


Sprite1X = 399
Sprite1Y = 299

oldTime = ElapsedMilliseconds()

Repeat
  FlipBuffers()
  ClearScreen(255+256*255+256*256*255)
  DisplayTransparentSprite(1,Sprite1X,Sprite1Y)

  ;
  ; variable 'flip' alle 200 ms zwischen 0 und 1 wechseln
  ;
  startTime = ElapsedMilliseconds()
  If startTime - oldTime >= 200 ; 200ms flip
    flip ! 1
    oldTime = startTime
  EndIf

  ExamineKeyboard()

  If KeyboardPushed(#PB_Key_Escape)
    End
  EndIf
  
  If KeyboardPushed(#PB_Key_Up)
    Sprite1Y - 1
  EndIf

  If KeyboardPushed(#PB_Key_Down)
    Sprite1Y + 1
    If flip
      ClipSprite(1,40,0,29,59); [color=#0040FF]hier allerdings zeigt er, sobald Ich den Pfeil nach unten drück, nur einen der beiden Clips an. Gibt es irgendeinen Befehl um die Clips nach einer bestimmten Zeit zu tauschen?[/color]
    Else
      ClipSprite(1,77,0,29,59)
    EndIf
  Else
    ClipSprite(1,0,0,29,59)
  EndIf
   
  If KeyboardPushed(#PB_Key_Left)
    Sprite1X - 1
  EndIf
  
  If KeyboardPushed(#PB_Key_Right)
    Sprite1X + 1
  EndIf
ForEver
ExamineKeyboard() solltest Du auch nur einmal in Deiner Schleife aufrufen,
sonst könnten Tastendrucke manchmal verloren gehen.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Antworten