PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : kleines script-problem



Doktor von Stein
07.03.2010, 15:20
ich versuche grade ein spiel zu proggen, indem es darum geht, möglichst lange durchzuhalten. es wird also immer eine sekunde dazugerechnet und das soll dann auf dem bildschirm ausgegeben werden. das ganze sieht bei mir ungefähr so aus:

class Bla
def main
@zeit = 0
@rect = Rect.new(0,0,640,480)
@vielzeit = Sprite.new
@vielzeit.bitmap = Bitmap.new(640,480)
@vielzeit.bitmap.font.color = Color.new(255,255,255,0)
@vielzeit.bitmap.draw_text(@rect, @zeit.to_s)
end #main
def update
@zeit += 1
@vielzeit.bitmap.draw_text(@rect, @zeit.to_s)
end #update
end #class

so, was hab ich falsch gemacht? er zeigt keinen fehler an aber auch nicht die variable.

-KD-
07.03.2010, 17:12
Verwendest du die Standardskripte, oder willst du komplett mit eigenen Scripten arbeiten? Bei ersterem müsstest du dein Script z.B. in Scene_Map#main initialisieren und in Scene_Map#update updaten. Sonst wird nichts angezeigt. Außerdem solltest du überprüfen ob dein Timer-Sprite nicht von anderen Sprites verdeckt wird (ggf. z-Koordinate erhöhen, besser noch in den korrekten Viewport packen).
Bei letzterem brauchst du eine Hauptschleife der Form

bla = Bla.new
loop do
# nur jede Sekunde updaten
if Graphics.frame_count % Graphics.frame_rate then
bla.update
end
Graphics.update
end

Ansonsten noch ein paar Bemerkungen zum Code:

- Deine draw_text Methode löscht das vorherige Bitmap nicht. Die Zahlen werden also einfach übereinander geschrieben -> sieht etwas komisch aus ^^ Besser vorher fill_rect mit transparenter Farbe ausführen um die vorherige Schrift zu löschen
- dein Bitmap ist ziemlich groß für einen Timer oO Wenn du nicht weißt wie viel Platz der Timer braucht, erzeuge eine 1*1 Dummy-Bitmap und berechne den Platzbedarf per text_size Methode. Ein 640*480 Pixel großes Bitmap frisst unnötig Ressourcen. Nicht schlimm, aber halt unnötig ^^
- Ausgabe (Grafik, Sound, usw.) und Spielmechanik sollten immer voneinander getrennt sein. Schreib eine Klasse Sprite_Timer < Sprite die den Timer anzeigt und eine Klasse Game_Timer, die den Countdown runterzählt. Vermisch nicht beides in ein und derselben Klasse. Wenn du Standardskripte verwendest, solltest du den Game_Timer als Attribut eines bestehenden $game_ Objektes machen. z.B. $game_temp.countdown o.ä. Dein Sprite_Timer wird dann z.B. Attribut von Spriteset_Map

Doktor von Stein
07.03.2010, 20:17
ich hab die standartskripte nicht gelöscht, aber ich lasse das script direkt im main aufrufen, dewegten ist das mit dem map doof. Die z-koordinate ist nicht schuld, hab ich schon überprüft. deine meisten bemerkungen zum code versteh ich nicht ganz. und das mit der größe ... es soll ja ersteinmal funzen.

tja, ich bin immer noch blutiger anfänger

mfg Salamie

-KD-
09.03.2010, 00:16
Dann zeig mal dein Main-Skript. Es sollte im einfachsten Fall so aussehen:

bla = Bla.new
bla.main
loop do
bla.update
Graphics.update
end

Doktor von Stein
13.03.2010, 20:21
hat sich erledigt