Funktion - Bilder wechseln

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

Rafi

Betreff: Funktion - Bilder wechseln

BeitragMo, Feb 05, 2007 14:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Ich will ein Symbol haben was immer aufblinkt. Für den Anfang dachte ich, dass ich einfach zwei Bilder abwechseln. Ich will eine Funktion haben, mit der ich auch bestimmen kann alle wieviel Millisecs sich das Bild ändern.

Wenn ich die wechselvariable und den Timer Global definiere dann geht es, allerdings will ich ja die Funktion für mehrere Symbole nehmen mit unterschiedlichen Geschwindigkeiten.

Gibt es dazu ein gutes Tutorial? Ich stehe öfter vor dem Problem, dass ich nicht weiß wie man geschickt animiert ohne viel zu viel Code zu schreiben. z.B. Animation in einer Tilemap etc.


Das ist mein Versuch, der leider nicht geht:

START_TIMER=Millisecs()

Function BILDWECHSELN(bild1:TImage, bild2:TImage, sec:Int, x_bild:Int, y_bild:Int)

Local wechselvariable
Local BILDWECHSELN_TIMER = START_TIMER

If BILDWECHSELN_TIMER + sec < MilliSecs()
If wechselvariable = 0 Then
wechselvariable = 1
Else
wechselvariable = 0
EndIf
BILDWECHSELN_TIMER = MilliSecs()
EndIf

If wechselvariable = 0 DrawImage bild1, x_bild, y_bild
If wechselvariable = 1 DrawImage bild2, x_bild, y_bild

'DrawText wechselvariable, 300, 300
End Function

Danke!
 

Rafi

Betreff: noch eine Ergänzung

BeitragMo, Feb 05, 2007 14:48
Antworten mit Zitat
Benutzer-Profile anzeigen
... dazu noch:

Ich hab sowieso viele Fragen was den Spielaufbau betrifft. Wie informiert man sich da am besten?
 

Dreamora

BeitragMo, Feb 05, 2007 15:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Dein Problem ist ein Paradebeispiel für die Nutzung von Objektorientierung. Dann kannst du nämlich aus dem "Blinky bildchen" ein Objekt machen, welches ein Bild hat mit verschiedenen Bildern, eine "lastUpdate" Variable und eine Variable die sagt wie lange ein Frame angezeigt werden soll.
Darüber hinaus brauchts natürlich eine Update und Draw Methode, damit man was sieht und sich das auch aktualisiert.

Darüber hinaus: Es gibt allerlei Resourcen. Primär das Tutorial und FAQ Board hier und auf www.blitzbasic.com, ansonsten wenn du C oder andere Sprachen kannst, ist Google ein sehr guter Weg (kannst ja erst Mal mit robsite.de, gamedev.net, gamasutra.org anfangen. hat net viel für BM, aber das brauchst du ja auch nicht, denn die Struktur ist in allen Sprachen +- gleich und die Paradigmen etc sind allgemeingültig)

Ja englisch wird vorausgesetzt aber das gilt für alle Blitz Sprachen, denn es gibt davon keine deutsche Version und die Fähigkeit die Hilfe/Dokumentation zu benutzen und verstehen darf man von einem Programmierer ja erwarten Smile
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Rafi

BeitragMo, Feb 05, 2007 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah ok. Vielen Dank, kannst du mir mal ein Muster von so einem Type posten?

Ich hab es jetzt so gemacht Entspricht das dem wie du es meinst?

Type TBlinkbild
Field bild1:TImage
Field bild2:TImage
Field lastupdate:Int
Field sec:Int
Field x_bild:Int
Field y_bild:Int
Field BILDWECHSELN_TIMER:Int = MilliSecs()

Method update()
If BILDWECHSELN_TIMER + sec < MilliSecs()
If lastupdate = 0 Then
lastupdate = 1
Else
lastupdate = 0
EndIf
BILDWECHSELN_TIMER = MilliSecs()
EndIf
End Method

Method drawself()
If lastupdate = 0 DrawImage bild1, x_bild, y_bild
If lastupdate = 1 DrawImage bild2, x_bild, y_bild
End Method

End Type


Damit funktioniert es. Smile
Danke
 

Dreamora

BeitragMo, Feb 05, 2007 15:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Jupp, ist in etwa das was ich meinte Smile
Hätte allerdings AnimImage genommen und das ganze dann ein wenig "generischer" gemacht, so das es eine unbestimmte Anzahl Bilder erlaubt Smile

Code: [AUSKLAPPEN]

Type TBlinkbild
  Field bild:TImage   ' Dies ist ein animiertes Bild mit mehreren Frames
  Field lastUpdate:Int
  Field timePerFrame:Int
  Field curFrame:int
  Field maxFrames:int
  Field x_bild:Int
  Field y_bild:Int

  Method Init(bild:TImage, Frames:int)
    assert bild <> NULL, "bild muss ein existierendes TImage sein"
    assert Frames > -1, "Es muss mindestens 1 Frame vorhanden sein"

    self.bild = bild
    self.maxFrames = Frames
    self.curFrame = 0
  end method

  Method update()
    If MilliSecs() - self.lastUpdate >= timePerFrame
      self.curFrame = (self.curFrame + 1) mod self.maxFrames
      self.lastUpdate = Millisecs()
    endif
  End Method

  Method drawself()
    DrawImage self.bild, self.x_bild, self.y_bild, self.curFrame
  End Method

End Type
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group