Tiles animieren funktioniert nicht

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Lador

Betreff: Tiles animieren funktioniert nicht

BeitragFr, Sep 08, 2006 15:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, ich wollte mal fragen, wie man am besten Tiles bei einem RPG animieren kann. Ich benutze(wie die meisten von euch wahrscheinlich auch) ein Dim-Feld, in dem die Frames der einzelnen Tiles gespeichert sind. Ich habe das Ganze mit Millisecs() und verschiedenen Layers gemacht, sodass jede halbe Sekunde der Layer + 1 wird. Aber genau wie bei den anderen Methoden, die ich bisher angewendet habe, endet das immer so:

Immer ein Block hat den einen Frame, ein anderer den anderen.

Ich hoffe, ich habe mich klar ausgedrückt.

Lador
 

Matthias

BeitragFr, Sep 08, 2006 15:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hay Lador. Poste mal dein Quellcode sonst kann dir hir niemand helfen.

gameworx

BeitragFr, Sep 08, 2006 15:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde mit Types arbeiten und dabei ein Feld für die aktuelle Animationsphase sowie die für letzte Animationsphase definieren.
AMD Athlon II X3 440 (3 GHz), 4GB Ram, ATI Radeon HD 5450, Win 7
 

Lador

BeitragFr, Sep 08, 2006 16:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
DrawImage tileset,x*32-scrollx,y*32-scrolly,map(x,y,1)
DrawImage tileset,x*32-scrollx,y*32-scrolly,water(x,y,wasserlayer)
DrawImage tileset,x*32-scrollx,y*32-scrolly,map(x,y,2)

wasserzeit = MilliSecs()
If anim = True
 If wasserzeit >= (wasserstart+wasserpause) Then
  wasserlayer = wasserlayer + 1
  If wasserlayer > 3 Then wasserlayer = 0
  wasserstart = MilliSecs()
 EndIf
EndIf

If map(x,y,1) = 360 Then water(x,y,0) = 360
If water(x,y,0) = 360 Then
 water(x,y,1) = 361:water(x,y,2) = 362:water(x,y,3) = 361
EndIf


Das ist der Ausschnitt des Codes, in dem ich mit dem Wasser arbeite.
 

Matthias

BeitragFr, Sep 08, 2006 18:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich kann mir nur vorstellen das deine wasserlayervariable nicht global ist
oder dein Code zu wenig. Wenn ich das machen würde dan würde ich das so machen.


Code: [AUSKLAPPEN]

Dim Map(100,100)
Dim Tiles(10);-------------10 TilesSets-------------"
Tiles(0)=LoadAnimImage("Tiles.Bmp",16,16,0,20)

WasPause=30
setbuffer backbuffer()
repeat

;--------------------Wasser Layers--------------------------------

if Millisecs()>WasTimer+WasPause then
WasLayer=WasLayer+1:WasLayer=WasLayer mod 10
WasTimer=Millisecs()
end if



;---------------------Map Aufbau------------------------------------
For X=0 to 99:For Y=0 to 99:Tie=Map(X,Y):select Tie<10:
case 1:DrawBlock Tiles(Set),X*16,Y*16,WasLayer
default:DrawBlock Tiles(Set),X*16,Y*16,Tie
end select:next:next


flip:until keydown(1)=1



Habe ich zwar jetzt nich getestet aber hoffe das es drozdem geht.

Kryan

BeitragFr, Sep 08, 2006 20:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Nimm das aus der For X-For Y-Schleife raus:

Code: [AUSKLAPPEN]
wasserzeit = MilliSecs()
If anim = True
 If wasserzeit >= (wasserstart+wasserpause) Then
  wasserlayer = wasserlayer + 1
  If wasserlayer > 3 Then wasserlayer = 0
  wasserstart = MilliSecs()
 EndIf
EndIf

Es soll ja nicht 1000te Male überprüft und sag auch mal welchen wert wasserpause hat!
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!
 

Lador

BeitragSa, Sep 09, 2006 16:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank, Matthias, Kryan und auch gameworx. Ich habe den Codeteil aus der For-Schleife rausgetan, und jetzt funktioniert es!!! Very Happy

Danke

Lador

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group