PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [RPG-Maker VX] Title Screen - Schlicht aber nicht Default?



Knopey
27.09.2012, 23:36
Man will es schlicht.
Klar möchte ein jeder heute für sein Spiel einen individuellen Titelbildschirm haben. Und das "Scripten" in den neueren RPG-Maker-Generationen bietet dafür auch eine hervorragende Grundlage. Aber für meine Zwecke sind selbst erstellte Grafiken, alternative Fonts und bunte Hintergrundbilder zu viel des Guten.
Ich möchte einen schlichten Titelbildschirm, der jedoch nicht sofort an den langweiligen Standard "RPG-Maker-VX-hübsche-Häuser-und-blauer-Himmel"-Bildschirm erinnert. Leider stoße ich da viel zu schnell an meine Grenzen. Denn ich weiß, ich muss scripten und, na ja, der einzige Maker, den ich bisher je ernsthaft benutzt habe, war der RM2K. ;)
Leider finde ich im ganzen Internet auf jeder Sprache, die ich verstehe, keine Skripte, Tutorials, etc., die auf meine bescheidenen Wünsche eingehen.

Meine Kernfragen sind nun:
1. Kann ich die Durchsichtigkeit des Auswahlmenüs (Neues Spiel, Laden, Beenden) im Titelbildschirm verändern?
2. Kann ich das Fenster des selben Menüs auch verbreitern?
3. Kann ich Schrift im Titelbild hinzufügen (ohne extra Grafiken anzufertigen)?
4. Kann ich zum Beispiel Wettereffekte integrieren?
5. Kann ich die Sichtbarkeit des Hintergrundbildes verändern?

Für alle vier Fragen gilt: "Wenn ja, wie?"
Und am besten wär der Sache gedient, wenn keine externen Ressourcen hierzu benötigt würden.

caesa_andy
28.09.2012, 12:05
Deine Wünsche sind alles andere als Bescheiden, sondern ein erheblicher eingriff in die Engine. Insbesondere deine Wettereffekte. ;)

Aber dennoch:

Tatsache 1: Möglich ist (fast) alles.
Tatsache 2: Du wirst auf der ganzen Welt kein Tutorial finden, das dir erklärt, wie du mit einer Programiersprache, die du nicht kannst, an einem System, das du nicht kennst, änderungen vornehmen kannst, um dein gewünschtes ergebniss zu bekommen.


Unter dem Strich hast du also nur 2 Möglichkeiten:

Entweder du lernst richtig Ruby ... mit Einstiegstotorials von klein auf. Oder du benutz bereits existierende Scripts, auch wenn diese "extern" sind. Von Moghunter gibt es beispielsweise eines für den VX.
http://www.atelier-rgss.com/RGSS/RGSS_VX.html

Knopey
28.09.2012, 12:17
Noooüüüüüün!!!
War ja klar, dass so etwas kommen musste. :)
Nun ja, die Wettereffekte wären ja nicht notwendig. Aber nun gut, ich danke trotzdem.
Mal schauen, wie ich mich herantasten werde. :) Vermutlich nehm ich mir die Zeit für einen Ruby-Lehrgang.

caesa_andy
28.09.2012, 12:39
Was genau hast du denn erwartet? Das irgendwer ein Tutorial geschrieben hat in welchem drinsteht, wie dein Quellcode auszusehen hat? Dann kann der jenige auch gleich den Quellcode öffentlich machen, dass ist dasselbe.

Das ist, als wenn du fragst, ob es ein Tutorial gibt, in welchem drinsteht, wie man als Deutscher ohne Chinesisch-Kentnisse einen Roman auf Chinesisch schreibt.

Cornix
28.09.2012, 13:16
[...]
Meine Kernfragen sind nun:
1. Kann ich die Durchsichtigkeit des Auswahlmenüs (Neues Spiel, Laden, Beenden) im Titelbildschirm verändern?
Sehr einfach.


2. Kann ich das Fenster des selben Menüs auch verbreitern?
Sehr einfach.


3. Kann ich Schrift im Titelbild hinzufügen (ohne extra Grafiken anzufertigen)?
Sehr einfach.


4. Kann ich zum Beispiel Wettereffekte integrieren?
Relativ kompliziert.


5. Kann ich die Sichtbarkeit des Hintergrundbildes verändern?
Was genau meinst du mit Sichtbarkeit? Transparenz? In dem Falle sehr einfach.

Du verwendest den VX, nicht den VX-Ace, richtig?
Den Ace habe ich nämlich nicht, bei dem VX allerdings kann ich dir weiterhelfen:

Zuallererst musst du in deinem Projekt den Scripteditor öffnen und das Script suchen mit dem Namen: "Scene_Title", alle Veränderungen müssen wir hieran vornehmen.

Das hier ist die Stelle im Script welche die Hintergrundgrafik für den Titelbildschirm setzt:

def create_title_graphic
@sprite = Sprite.new
@sprite.bitmap = Cache.system("Title")
end
Wenn du bei diesem Bild die Transparenz ändern willst so musst du lediglich folgende Zeile am Ende hinzufügen:

@sprite.opacity = 128
Das würde die Transparenz des Hintergrundbildes auf 50% setzen. Der Wert muss eine ganze Zahl zwischen 0 und 255 sein wobei 0 völlig unsichtbar und 255 völlig sichtbar bedeutet.

Der einfachste Weg Text auf dem Titelbildschirm hinzuzufügen wäre es meiner Meinung nach ihn direkt auf das Bild zeichnen zu lassen:

def create_title_graphic
@sprite = Sprite.new
@sprite.bitmap = Cache.system("Title")
@sprite.bitmap.font.name = "Arial"
@sprite.bitmap.font.size = 22
@sprite.bitmap.font.color = Color.new(255, 0, 0, 255)
@sprite.bitmap.font.bold = true
@sprite.bitmap.font.italic = false
@sprite.bitmap.draw_text(0,0,256,24,"Hallo Welt", 1)
end
Dieser kleine Abschnitt hier würde folgendes machen:
Als font wird Arial verwendet mit einer Schriftgröße von 22, gezeichnet wird in der Farbe Rot (RGBA 255, 0, 0, 255) und zwar fett, aber nicht kursiv.
Dann wird an dem Punkt (0 / 0) (linke obere Bildschirmecke) ein 256x24 Großes Rechteck gewählt und der Text Hallo Welt mittig hineingeschrieben so gut es geht.
Die ganzen Aktionen mit dem Font kannst du auch weglassen, ich habe sie nur mit eingefügt um dir zu zeigen, was alles möglich ist.
Die Funktion "draw_text(...)" hat folgende Syntax:
1. Parameter: X-Position des Textes
2. Parameter: Y-Position des Textes
3. Parameter: Breite des Rechteckes in welches geschrieben werden soll
4. Parameter: Höhe des Rechteckes in welches geschrieben werden soll
5. Parameter: Text welcher geschrieben werden soll
6. Parameter: Alignment: 0 == Linksbündig, 1 == Zentriert, 2 == Rechtsbündig

Um das Kommandofenster durchsichtig zu machen musst du folgenden Code verändern:

def create_command_window
s1 = Vocab::new_game
s2 = Vocab::continue
s3 = Vocab::shutdown
@command_window = Window_Command.new(172, [s1, s2, s3])
@command_window.x = (544 - @command_window.width) / 2
@command_window.y = 288
if @continue_enabled # If continue is enabled
@command_window.index = 1 # Move cursor over command
else # If disabled
@command_window.draw_item(1, false) # Make command semi-transparent
end
@command_window.openness = 0
@command_window.open
end
Das ist der Standardcode für das Command-Window, also das Fenster mit den Auswahlmöglichkeiten.
Um die Breite des Fensters zu ändern musst du auf folgende Zeile achten:

@command_window = Window_Command.new(172, [s1, s2, s3])
Hiermit wird das Fenster erstellt und der erste Parameter im Konstruktor gibt die Breite an, in diesem Fall die 172 als Standardwert. Wenn du diese Zeile nun, zum Beispiel, in folgende ändern würdest:

@command_window = Window_Command.new(300, [s1, s2, s3])
Wäre das Fenster etwas breiter.
Du kannst die Position des Fensters mit den beiden Zeilen darunter verändern, diejenigen welche:

@command_window.x = (544 - @command_window.width) / 2
@command_window.y = 288
lauten. Hier hast du zugriff auf die X- und Y-Koordinaten des Fensters (die linke obere Ecke des Bildschirms ist 0,0).
Wenn du diese Zeilen zum Beispiel wie folgt änderst:

@command_window.x = 0
@command_window.y = 0
Ist das Fenster ganz oben Links.

Um die Durchsichtigkeit des Fensters zu ändern musst du auch nicht sehr viel machen, folgende Zeilen kannst du an dem Code hinzufügen:

@command_window.contents_opacity = 128
@command_window.back_opacity = 128
Die erste Zeile würde die Durchsichtigkeit des Fensterinhalts, also der Schrift, setzen. Wie auch bei dem Bild, oben beschrieben, auf 50%. (Werte zwischen 0 == unsichtbar und 255 == vollkommen sichtbar.)
Die zweite Zeile würde die Durchsichtigkeit des Fensters an sich auf 50% setzen. Auch hier gelten für die Werte die gleichen regeln.

Im ganzen könnte der Code dann wie folgt aussehen:

def create_command_window
s1 = Vocab::new_game
s2 = Vocab::continue
s3 = Vocab::shutdown
@command_window = Window_Command.new(172, [s1, s2, s3])
@command_window.x = (544 - @command_window.width) / 2
@command_window.y = 288
if @continue_enabled # If continue is enabled
@command_window.index = 1 # Move cursor over command
else # If disabled
@command_window.draw_item(1, false) # Make command semi-transparent
end
@command_window.openness = 0
@command_window.open
@command_window.contents_opacity = 224
@command_window.back_opacity = 128
end

Ich hoffe das konnte dir helfen, auf den Wettereffekt kann ich leider nicht eingehen, da ich mit dem VX noch nie wirklich gearbeitet habe.

Knopey
28.09.2012, 20:52
caesa_andy, danke für deine Antwort aber mal abgesehen davon, dass der Vergleich irgendwie so gar nicht zutreffend ist, habe ich mir genau das Gleiche gedacht, und das Internet durchforstet, um zu sehen, ob jemand etwas Derartiges veröffentlicht hat. Leider vergebens, also dachte ich mir, fragen kostet bekanntlich nichts. Und siehe da - ein Post unter deinem kommt genau das, was ich mit erhofft habe.

Tausend Dank, Cornix! Ich wende deinen Support direkt morgen mal an. Das Wetterzeug wäre nur hübscher Schnickschnack gewesen, geht auch gut ohne :)
Plausibel, super erklärt und leicht verständlich. Danke noch mal

ETeCe
28.09.2012, 21:02
Zum Wettereffekt:
Allzu schwer ist der Effekt nicht einzufügen, da dazu bereits eine passende Klasse existiert: Spriteset_Weather.
Um den Wettereffekt einzubinden sind letztlich nur noch folgende Schritte nötig:

1. Beim Start des Titelmenüs muss ein neues "Spriteset_Weather" erzeugt und in einer Variablen gespeichert werden.
Dazu muss in der Methode "start" in Scene_Title folgende Zeile eingefügt werden:

@wettereffekt = Spriteset_Weather.new
Über die gewählte Variable (hier @wettereffekt) kann anschließend auf das neue Objekt zugegriffen werden.
Da der Wettereffekt, die Hintergrundgrafik und das Kommandofenster standardmäßig die selbe Priorität (z-Koordinate) haben sollte diese Zeile zwischen create_title_graphic und create_command_window eingefügt werden.


2. Für einen Wettereffekt können Wettertyp und Wetterstärke eingestellt werden. Dazu können nach der Erstellung folgende Aufrufe getätigt werden:

@wettereffekt.type = 1 # <- 0: kein Wetter, 1: Regen, 2: Sturm, 3: Schneefall - in diesem Fall wurde Regen gewählt
@wettereffekt.max = 25 # <- Wetterstärke: hier darf eine ganze Zahl zwischen 0 und 40 gewählt werden

3. Damit der Wettereffekt auch animiert ist und nicht fest auf dem Bildschirm klebt muss die Wetterbewegung aktualisiert werden.
Auch hier nimmt dir das Spriteset_Weather fast alle Arbeit ab, es muss nur jedes Mal
@wettereffekt.update aufgerufen werden wenn sich die Animation weiterbewegen soll. Damit das regelmäßig passiert sollte diese Zeile in die update-Methode von Scene_Title eingefügt werden (wird regelmäßig aufgerufen).

4. Wird das Titelmenü beendet sollte saubererweise auch der Wettereffekt beendet werden.
Dazu sollte in der terminate-Methode von Scene_Title folgende Zeile eingefügt werden:

@wettereffekt.dispose

Sollte zumindest so funktionieren, habe den RMVX lange nicht mehr ausprobiert :)

Knopey
29.09.2012, 12:48
Spitze, danke. Hab jetzt alles, was ihr dankenswerterweise so übersichtlich aufgeschrieben habt, mal angewandt. Vieles funktioniert auch.
Nur leider wirkt die Veränderung der sprite.opacity für den Titelhintergrund nicht in Kombination mit dem gezeichneten Text. Einzeln funktioniert beides. Wende ich aber beides an, bleibt der Hintergrund einfach so vollständig sichtbar.

Leider passiert beim Einfügen der Zeilen für den Wettereffekt jar nüscht. Die Variable (der Code unter 1. deines Posts) habe ich in "Start Processing", unmittelbar gefolgt vom Code unter 2. Den Update (unter 3.) habe ich in "Frame Update" eingefügt. Und der Code aus 4. ist in Termination Processing hinterlegt. Ich vermute ja, dass ich die Variable an der falschen Stelle gesetzt habe, aber wo wäre sie richtig gewesen?

Cornix
29.09.2012, 14:20
Könntest du vielleicht den kompletten, von dir veränderten, Code einmal hier schreiben damit wir darüberschauen können? Vor allem besagte, nicht funktionierende, Codestellen.

Knopey
29.09.2012, 18:40
Klar. Habe den Code mal übernommen und Abschnitte, in denen ich Änderungen vorgenommen hab, rot markiert. Alles in allem lautet das Script Scene_Title:

#==============================================================================
# ** Scene_Title
#------------------------------------------------------------------------------
# This class performs the title screen processing.
#==============================================================================

class Scene_Title < Scene_Base
#--------------------------------------------------------------------------
# * Main Processing
#--------------------------------------------------------------------------
def main
if $BTEST # If battle test
battle_test # Start battle test
else # If normal play
super # Usual main processing
end
end
#--------------------------------------------------------------------------
# * Start processing
#--------------------------------------------------------------------------
def start
super
load_database # Load database
create_game_objects # Create game objects
check_continue # Determine if continue is enabled
create_title_graphic # Create title graphic
create_command_window # Create command window
play_title_music # Play title screen music
@wettereffekt = Spriteset_Weather.new
@wettereffekt.type = 3 # <- 0: kein Wetter, 1: Regen, 2: Sturm, 3: Schneefall - in diesem Fall wurde Regen gewählt
@wettereffekt.max = 40 # <- Wetterstärke: hier darf eine ganze Zahl zwischen 0 und 40 gewählt werden
end
#--------------------------------------------------------------------------
# * Execute Transition
#--------------------------------------------------------------------------
def perform_transition
Graphics.transition(20)
end
#--------------------------------------------------------------------------
# * Post-Start Processing
#--------------------------------------------------------------------------
def post_start
super
open_command_window
end
#--------------------------------------------------------------------------
# * Pre-termination Processing
#--------------------------------------------------------------------------
def pre_terminate
super
close_command_window
end
#--------------------------------------------------------------------------
# * Termination Processing
#--------------------------------------------------------------------------
def terminate
super
dispose_command_window
snapshot_for_background
@wettereffekt.dispose
dispose_title_graphic
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
super
@command_window.update
if Input.trigger?(Input::C)
case @command_window.index
when 0 #New game
command_new_game
when 1 # Continue
command_continue
when 2 # Shutdown
command_shutdown
end
@wettereffekt.update
end
end
#--------------------------------------------------------------------------
# * Load Database
#--------------------------------------------------------------------------
def load_database
$data_actors = load_data("Data/Actors.rvdata")
$data_classes = load_data("Data/Classes.rvdata")
$data_skills = load_data("Data/Skills.rvdata")
$data_items = load_data("Data/Items.rvdata")
$data_weapons = load_data("Data/Weapons.rvdata")
$data_armors = load_data("Data/Armors.rvdata")
$data_enemies = load_data("Data/Enemies.rvdata")
$data_troops = load_data("Data/Troops.rvdata")
$data_states = load_data("Data/States.rvdata")
$data_animations = load_data("Data/Animations.rvdata")
$data_common_events = load_data("Data/CommonEvents.rvdata")
$data_system = load_data("Data/System.rvdata")
$data_areas = load_data("Data/Areas.rvdata")
end
#--------------------------------------------------------------------------
# * Load Battle Test Database
#--------------------------------------------------------------------------
def load_bt_database
$data_actors = load_data("Data/BT_Actors.rvdata")
$data_classes = load_data("Data/BT_Classes.rvdata")
$data_skills = load_data("Data/BT_Skills.rvdata")
$data_items = load_data("Data/BT_Items.rvdata")
$data_weapons = load_data("Data/BT_Weapons.rvdata")
$data_armors = load_data("Data/BT_Armors.rvdata")
$data_enemies = load_data("Data/BT_Enemies.rvdata")
$data_troops = load_data("Data/BT_Troops.rvdata")
$data_states = load_data("Data/BT_States.rvdata")
$data_animations = load_data("Data/BT_Animations.rvdata")
$data_common_events = load_data("Data/BT_CommonEvents.rvdata")
$data_system = load_data("Data/BT_System.rvdata")
end
#--------------------------------------------------------------------------
# * Create Game Objects
#--------------------------------------------------------------------------
def create_game_objects
$game_temp = Game_Temp.new
$game_message = Game_Message.new
$game_system = Game_System.new
$game_switches = Game_Switches.new
$game_variables = Game_Variables.new
$game_self_switches = Game_SelfSwitches.new
$game_actors = Game_Actors.new
$game_party = Game_Party.new
$game_troop = Game_Troop.new
$game_map = Game_Map.new
$game_player = Game_Player.new
end
#--------------------------------------------------------------------------
# * Determine if Continue is Enabled
#--------------------------------------------------------------------------
def check_continue
@continue_enabled = (Dir.glob('Save*.rvdata').size > 0)
end
#--------------------------------------------------------------------------
# * Create Title Graphic
#--------------------------------------------------------------------------
def create_title_graphic
@sprite = Sprite.new
@sprite.bitmap = Cache.system("Title")
@sprite.opacity = 128
end
#--------------------------------------------------------------------------
# * Draw Text on Title Screen
#--------------------------------------------------------------------------
def create_title_graphic
@sprite = Sprite.new
@sprite.bitmap = Cache.system("Title")
@sprite.bitmap.font.name = "Arial"
@sprite.bitmap.font.size = 50
@sprite.bitmap.font.color = Color.new(255, 0, 0, 255)
@sprite.bitmap.font.bold = true
@sprite.bitmap.font.italic = true
@sprite.bitmap.draw_text(0,0, 512,256,"Cornix und ETeCe, vielen Dank für eure Hilfe! :)", 1)
end
#--------------------------------------------------------------------------
# * Dispose of Title Graphic
#--------------------------------------------------------------------------
def dispose_title_graphic
@sprite.bitmap.dispose
@sprite.dispose
end
#--------------------------------------------------------------------------
# * Create Command Window
#--------------------------------------------------------------------------
def create_command_window
s1 = Vocab::new_game
s2 = Vocab::continue
s3 = Vocab::shutdown
@command_window = Window_Command.new(300, [s1, s2, s3])
@command_window.x = (512 - @command_window.width)
@command_window.y = 288
@command_window.back_opacity = 75
if @continue_enabled # If continue is enabled
@command_window.index = 1 # Move cursor over command
else # If disabled
@command_window.draw_item(1, false) # Make command semi-transparent
end
@command_window.openness = 0
@command_window.open
end
#--------------------------------------------------------------------------
# * Dispose of Command Window
#--------------------------------------------------------------------------
def dispose_command_window
@command_window.dispose
end
#--------------------------------------------------------------------------
# * Open Command Window
#--------------------------------------------------------------------------
def open_command_window
@command_window.open
begin
@command_window.update
Graphics.update
end until @command_window.openness == 255
end
#--------------------------------------------------------------------------
# * Close Command Window
#--------------------------------------------------------------------------
def close_command_window
@command_window.close
begin
@command_window.update
Graphics.update
end until @command_window.openness == 0
end
#--------------------------------------------------------------------------
# * Play Title Screen Music
#--------------------------------------------------------------------------
def play_title_music
$data_system.title_bgm.play
RPG::BGS.stop
RPG::ME.stop
end
#--------------------------------------------------------------------------
# * Check Player Start Location Existence
#--------------------------------------------------------------------------
def confirm_player_location
if $data_system.start_map_id == 0
print "Player start location not set."
exit
end
end
#--------------------------------------------------------------------------
# * Command: New Game
#--------------------------------------------------------------------------
def command_new_game
confirm_player_location
Sound.play_decision
$game_party.setup_starting_members # Initial party
$game_map.setup($data_system.start_map_id) # Initial map position
$game_player.moveto($data_system.start_x, $data_system.start_y)
$game_player.refresh
$scene = Scene_Map.new
RPG::BGM.fade(1500)
close_command_window
Graphics.fadeout(60)
Graphics.wait(40)
Graphics.frame_count = 0
RPG::BGM.stop
$game_map.autoplay
end
#--------------------------------------------------------------------------
# * Command: Continue
#--------------------------------------------------------------------------
def command_continue
if @continue_enabled
Sound.play_decision
$scene = Scene_File.new(false, true, false)
else
Sound.play_buzzer
end
end
#--------------------------------------------------------------------------
# * Command: Shutdown
#--------------------------------------------------------------------------
def command_shutdown
Sound.play_decision
RPG::BGM.fade(800)
RPG::BGS.fade(800)
RPG::ME.fade(800)
$scene = nil
end
#--------------------------------------------------------------------------
# * Battle Test
#--------------------------------------------------------------------------
def battle_test
load_bt_database # Load battle test database
create_game_objects # Create game objects
Graphics.frame_count = 0 # Initialize play time
$game_party.setup_battle_test_members
$game_troop.setup($data_system.test_troop_id)
$game_troop.can_escape = true
$game_system.battle_bgm.play
snapshot_for_background
$scene = Scene_Battle.new
end
end

(Der Code ist versteckt im Spoiler)

Die Sektion "Draw Text on Title Screen" hab ich selber hinzugefügt, der Übersicht halber.

Cornix
29.09.2012, 18:52
Dein Problem mit der Transparenz und dem Text liegt daran, dass du zwei Funktionen verwendest welche beide den selben Namen tragen.
Dadurch wird eine Funktion von der anderen überschrieben. Das bedeutet, dass ihre Funktionen natürlich nicht ausgeführt werden können.


#--------------------------------------------------------------------------
# * Create Title Graphic
#--------------------------------------------------------------------------
def create_title_graphic
@sprite = Sprite.new
@sprite.bitmap = Cache.system("Title")
@sprite.opacity = 128
end
#--------------------------------------------------------------------------
# * Draw Text on Title Screen
#--------------------------------------------------------------------------
def create_title_graphic
@sprite = Sprite.new
@sprite.bitmap = Cache.system("Title")
@sprite.bitmap.font.name = "Arial"
@sprite.bitmap.font.size = 50
@sprite.bitmap.font.color = Color.new(255, 0, 0, 255)
@sprite.bitmap.font.bold = true
@sprite.bitmap.font.italic = true
@sprite.bitmap.draw_text(0,0, 512,256,"Cornix und ETeCe, vielen Dank für eure Hilfe! :)", 1)
end
Das hier ist der böse Abschnitt.
Du musst das ganze wie folgt ändern:

#--------------------------------------------------------------------------
# * Create Title Graphic
#--------------------------------------------------------------------------
def create_title_graphic
@sprite = Sprite.new
@sprite.bitmap = Cache.system("Title")
@sprite.opacity = 128
@sprite.bitmap.font.name = "Arial"
@sprite.bitmap.font.size = 50
@sprite.bitmap.font.color = Color.new(255, 0, 0, 255)
@sprite.bitmap.font.bold = true
@sprite.bitmap.font.italic = true
@sprite.bitmap.draw_text(0,0, 512,256,"Cornix und ETeCe, vielen Dank für eure Hilfe! :)", 1)
end
Nun sollte es auch funktionieren.

Knopey
29.09.2012, 20:17
So was hab ich mir schon gedacht. Ich habe daraufhin dann einfach den Namen des Textes von "Sprite.new" in Xyz.new geändert. Dann kam nur leider eine Fehlermeldung und das Spiel wurde beendet :P
Hab das jetzt noch mal nach deinen Angaben korrigiert, und es klappt :)