PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Erledigt: Brauche Hilfe bei meinem Auswahlskrypt



OneEyeShadow
28.05.2009, 15:56
Hallo erstmal,
also ich bin seit neustem dran mich ein bischen im Skrypten zu üben, jetzt wollte ich mal ein eigenes Auswahlskrypt ohne Vorlage erstellen, doch ich kriege es aus irgendeinem Grund nicht hin, dass es richtig funktioniert.
class Scene_CharakterAuswahl
#--------------------------------------------------------------------------
#Haupt Anwendung
#--------------------------------------------------------------------------


def main



#laden der hauptgrafiken
ladegrafiken
Graphics.transition



loop do

# Aktualisieren der Grafiken
move_a
Graphics.update


# Aktualisieren der Tasteneingabe
Input.update

#Um A zu bewegen und ausgewählten Character zu ändern



#beenden dieser anwendung
if $scene != self
break
end
end
Graphics.freeze

#elemente löschen
#loeschen
end
#--------------------------------------------------------------------------
#S. Anwendungen
#--------------------------------------------------------------------------

#--------------------------------------------------------------------------
#Grafiken
#--------------------------------------------------------------------------

#--------------------------------------------------------------------------
#Hauptgrafik
#--------------------------------------------------------------------------

def ladegrafiken
x1 = ((640 - 152) / 2)
x2 = ((((640 - 152) / 2) - 152) - 3)
x3 = ((((640 - 152) / 2) + 152) + 3)
y = ((480 - 202) / 2)
@hintergrund = Sprite.new
@hintergrund.bitmap = RPG::Cache.picture("Black")
@basil = Sprite.new
@basil.bitmap = RPG::Cache.picture("Basil")
@basil.x = x1
@basil.y = y
@cyrus = Sprite.new
@cyrus.bitmap = RPG::Cache.picture("Cyrus")
@cyrus.x = x2
@cyrus.y = y
@dorothy = Sprite.new
@dorothy.bitmap = RPG::Cache.picture("Dorothy")
@dorothy.x = x3
@dorothy.y = y
end

def la
@a = Sprite.new
@a.bitmap = RPG::Cache.picture("A")
@a.x = ((640 - 152) / 2)
@a.y = ((480 - 202) / 2)
end



#--------------------------------------------------------------------------
#Animation (Das Bewegen des A-zeigers auf die Bilder)
#--------------------------------------------------------------------------

def move_a
if not @der_ausgewaelte
@der_ausgewaelte = 1
@a = Sprite.new
@a.bitmap = RPG::Cache.picture("A")
end

if @der_ausgewaelte = 1
@a.dispose
@a = Sprite.new
@a.bitmap = RPG::Cache.picture("A")
@a.y = ((480 - 202) / 2)
@a.x = ((640 - 152) / 2)
loop do
Graphics.update
if Input.trigger?(4)
@a = Sprite.new
@a.bitmap = RPG::Cache.picture("A")
@a.x = ((((640 - 152) / 2) - 152) - 3)
@a.y = ((480 - 202) / 2)
@der_ausgewaelte = 2
break
elsif Input.trigger?(6)
@a = Sprite.new
@a.bitmap = RPG::Cache.picture("A")
@a.y = ((480 - 202) / 2)
@a.x = ((((640 - 152) / 2) + 152) + 3)
@der_ausgewaelte = 3
break
else
end
end
elsif @der_ausgewaelte = 2
@a.dispose
@a = Sprite.new
@a.bitmap = RPG::Cache.picture("A")
@a.x = ((((640 - 152) / 2) - 152) - 3)
@a.y = ((480 - 202) / 2)
loop do
Graphics.update
if Input.trigger?(6)
@a.dispose
@a = Sprite.new
@a.bitmap = RPG::Cache.picture("A")
@a.y = ((480 - 202) / 2)
@a.x = ((640 - 152) / 2)
@der_ausgewaelte = 1
break
else
end
end
elsif @der_ausgewaelte = 3
@a.dispose
@a = Sprite.new
@a.bitmap = RPG::Cache.picture("A")
@a.x = ((((640 - 152) / 2) + 152) + 3)
@a.y = ((480 - 202) / 2)
loop do
Graphics.update

if Input.trigger?(4)
@a.dispose
@a = Sprite.new
@a.bitmap = RPG::Cache.picture("A")
@a.y = ((480 - 202) / 2)
@a.x = ((640 - 152) / 2)
@der_ausgewaelte = 1
break
else
end
end
else
end
end

endAlso Die Grafiken die mit @dorothy, @basil und @cyrus benannt sind haben alle die gleiche größe wie @a (152 und 202, die ich, weil ich dachte ich hätte mit .x - und .y.widht und highth einen Fehler verursacht, direkt hingeschrieben hab)
könnt ihr mir bitte sagen wo der Fehler liegt, dass es garnicht geht, ich habs jetzt schon tausend mal um geschrieben und ich kapier einfach nicht wo der Fehler liegt. Eine Änderung vor diesem Skrypt hat sich @a wenigstens ganz kurz auf die anderen Koordinaten bewegt, aber jetzt gehts garnicht mehr.
Bitte um Hilfe.

Shining Advances
28.05.2009, 16:02
glaub der fehler ist nur, dass in deinen schleifen weiter unten nach Graphics.update das Input.update fehlt. dadurch werden die tasten nich aktualisiert un bei Input.trigger? kommt immer das selbe raus.

OneEyeShadow
28.05.2009, 20:16
Danke für diese Antwort, ich habs gerade mal geändert, jetzt springt a wenigstens wieder für 'n paar milisekunden um, aber dennoch geht es dann sofort wieder auf das mittlere Bild. Also das war nicht der große fehler, nach dem ich gesucht habe, danke trozdem.

-KD-
30.05.2009, 14:48
Die Vergleichsmethode heißt == nicht =. = ist eine Variablenzuweisung. a = 5 weist die 5 an die Variable a, außerdem gibt der Ausdruck 5 zurück, was ein wahrer Wert ist. Schreibst du also if a = 5, dann wird die if-Bedingung immer ausgeführt und die Variable a immer auf 5 gesetzt.

btw. Du sagtest ja, dass du noch am lernen bist, aber das Menü ist trotzdem recht unglücklich aufgebaut. Du solltest nie mehr als eine Hauptschleife haben. Sprich: Außerhalb der main-Methode deiner Szene sollten Graphics.update und Input.update niemals aufgerufen werden. Bei dir hat aber jeder Menüpunkt seine eigene Hauptschleife. Weiterhin brauchst du deine Sprites nicht jedes Mal zu löschen. Lass sie einfach und ändere ihre Position + ihr Bitmap.

Das Problem ist, dass du das Makern mit EventCommands gewohnt bist, und instinktiv versuchst dein Rubymenü genauso zu schreiben wie ein Event-Menü. Das funktioniert zwar, wird dir allerdings nur kurzfristig Freude bereiten. Das schöne an Ruby ist ja, dass man mit weniger Code und weniger Aufwand komplexere Systeme schreiben kann als mit Eventcode. Das geht aber nur, wenn man seinen Code auch besser strukturiert.

Schreib dein Menü zuende, damit erstmal alles läuft. Danach kannst du dir ja mal meinen Rubykurs anschauen. Im dritten RGSS-Kapitel wird ebenfalls ein Charakter-Auswahl-Menü erläutert. Dort gibt es dann eine Hauptschleife und eine richtige Klassenunterteilung, die imo etwas vorteilhafter ist.

>>Rubykurs<< (http://www.rpg-studio.de/scientia/Ruby/RGSS/Tutorials/Rubykurs)

OneEyeShadow
30.05.2009, 21:41
Hallo -KD-,

Also Erstens: Du hast diesen Kurs geschrieben? Von dem hab ich alles gelernt, was ich über Ruby weiß (... was anscheinend noch ziemlich wenig ist, wie ja zu erwarten war ...) also respekt und ein großgeschriebenes: WOW

Zweitens: Danke für deinen Typ mit dem ==, ich habs gerade mal umgeändert, jetzt bleibt @a immerhin da, wo es sein sollte, allerdings bleibt es dennoch auf @basyl, ist also, wenn man einen der anderen Helden ausgewählt hat zwei mal da.

Ich weiß, dass mein Scrypt sehr schlecht strukturiert ist, ursprünglich war es viel besser strukturiert, doch weil ich den Fehler, wegen dem es nicht richtig funktionierte, nicht finden konnte hab ich es enorm umgeschrieben und verkompliziert. Wie auch immer, vielleicht hätte ich doch erstmal darauf verzichten sollen mein eigenes Auswahlscrypt zu schreiben und erstmal deines studieren sollen.

Dennoch schade, dass das Script dennoch nicht funktioniert.