Für Terrain-Tag gibts im RMXP hingegen bereits eine nützliche Funktion:
...
Das bedeutet, möchte ich nun den Terrain Tag des Feldes X/Y herausfinden und diesen Wert in einer game_variable abspeichern, so müsste ich lediglich diesen Code abfrufen:
Der Zeilenunbruch ist deshalb, weil der Call-Skript-Befehl leider nur kürzere Befehle aufnehmen kann.
Doch das löst nicht so richtig mein Problem: Gebe ich dem Wasser den Terrain-Tag 1, so gibt es 2 aus. Doch gebe ich den Wasser den Terrain-Tag 2, so bekommen ich 1. Und bei 7 für das Wasser bekomme ich auch den Wert 1 zurück.
Und dein kleines Skript:
sieht vielversprechend aus. Also müsste ich nun im Spiel den Call-Skript-Befehl:
event_on_position( 1, 2)
aufrufen. Doch wie lasse ich einen Switch einschalten, wenn auf ( 1, 2) ein Event befindet?
-KD- Was meinst du genau? Du sprichst viel zu hoch für mich ^,^ Bin halt noch ein riesiger Anfänger xD Und ich lese mir auch schon dein Tutorial durch ^,^
(kleine Änderung in Zeile 2, ich hatte $game_map.event irrtümlich für ein Array gehalten...)
Am besten wäre wohl diese Funktion in die Klasse Game_Interpreter einzubauen, um diese Funktion im Call-Script zu nutzen...
(wenn du dir nicht sicher sein solltest wo du das einfügen kannst erstell am besten ein neues Script, schreibe in die erste Zeile
class Game_Interpreter
füge ab der zweiten Zeile den Code ein und schließe mit einer weiteren Zeile
end
ab)
Um einen Switch zu aktivieren wenn sich an der Position ein event befindet müsstest du entweder
in einem Conditional Branch verwenden und bei Zutreffen einen Switch aktivieren oder als
Callscript:
(x, y, z entsprechend ersetzen)
Bei dieser Call-Scriptvariante würde der Switch ausgeschaltet wenn an der Stelle kein Event ist...
Zum Terrain-Tag:
Joa, genau so... funktioniert bei mir auch super...
evtl. liegt der "Fehler" darin dass die Tiles von links nach rechts bzw. oben nach unten von 0 beginnend durchnummeriert werden...
(das Feld oben-links entspricht also (0,0) , das rechts daneben (1,0) etc.)
-KD- Was meinst du genau? Du sprichst viel zu hoch für mich ^,^ Bin halt noch ein riesiger Anfänger xD Und ich lese mir auch schon dein Tutorial durch ^,^
...
Mir gings einfach nur darum das man sowas:
auch kürzer schreiben kann:
Muss man nicht machen. Ist wie gesagt nur ein Vorschlag. Mein Code macht genau dasselbe wie ETeCe seiner. Ist also egal welchen du nimmst.
Zitat
Doch das löst nicht so richtig mein Problem: Gebe ich dem Wasser den Terrain-Tag 1, so gibt es 2 aus. Doch gebe ich den Wasser den Terrain-Tag 2, so bekommen ich 1. Und bei 7 für das Wasser bekomme ich auch den Wert 1 zurück.
...
Neben dem was ETeCe gesagt hat wäre noch möglich, dass du über dem Wasser ein anderes Tile mit einem Terrain-Tag hast. Die Funktion terrain_tag gibt dir nur den Terrain-Tag des obersten Tiles (also im obersten Layer) zurück. Nur wenn dieser keinen Terrain-Tag hat wird der Terrain-Tag eines tieferen Layers zurückgegeben.
1.) Bissel dürftig, das Codebeispiel, aber falls du Windows verwendest, so gibt das Attribut Window#active an, ob der Cursor blinkt oder nicht, und das Attribut Window#cursor_rect gibt an wo sich der Cursor befindet und wie groß er ist. Bsp:
Siehe auch: Rubykurs: Windows
2.) Eigentlich hat das nichts in der Game_Player Klasse zu tun. Ich würde den Code in die Scene_Map Klasse packen. Wenn der Spieler sich nicht mehr bewegen soll, lässt du einfach die $game_player.update Methode raus, oder (wenn du wirklich NUR die Bewegung unterbinden willst) du fügst eine neue Bedingung in die unless moving? or $game_system.map_interpreter.running? or ... Bedingung in Game_player#update Methode ein.
Ah, und dein Code scheint generell etwas eigenartig auszusehen. Globale Variablen (beginnend mit einem $-Zeichen) solltest du möglichst vermeiden. Und zum umsetzen von Variablenwerten musst du schon einen Zuweisungsoperator verwenden.
Das habe ich mir selber schon überlegt.
Ich hätte, ich hätte es dazu getippt, aber andauernd vergesse ich etwas wichtiges zu erwähnen ^,^
Der Cursor soll außerhalb eines Fenster angezeigt werden. Und auch über andere Fenster.
Und je nach dem Wert von $smi soll er an einen komplett anderen Platz auf dem Bildschirm, also X und Y werden sich immer unterscheiden.
Und aus irgendeinen Grund will der Code:
nicht funktzionieren. Die globalen Variablen ändern sich nicht. Der Wert bleibt immer auf null.
Und in deinen Rubykurs finde ich nichts zum Cursor.
Zum zweiten: Das werde ich gleich mal probieren ^,^
Der Code tut nicht das was du willst, weil man Variablen nicht mit = sondern mit == vergleicht. Mit einem einfachen Gleichheitszeichen weist du einer Variablen nur einen neuen Wert zu.
Deine Abfragen überprüfen also letztlich ob -1 bzw. 3 true ist – was immer zutrifft. Daher wird $smi auch jedesmal auf 0 gesetzt, wenn du nach rechts drückst.
--
"Banjo, you're a BEAR... and I will teach you... THESE MOVES!"
Das mit den globale Variablen: Warum sind sie so schlecht? Das höre ich oft. Aber ich kann mit denen besser arbeiten.
...
Weil das den Code unflexibel macht und seine Wiederverwendung erschwert. Normalerweise kann man bestimmte Scripte, wie z.B. ein Fenster-Script, an mehreren Stellen des Spiels verwenden. Das bedingt aber, dass die Scripte sich untereinander nicht dieselben Variablen teilen. Da globale Variablen aber eben global sind, würden dann alle Scripte auf dieselben Variablen zugreifen und damit untereinander in Konflikt geraten. Mal als Beispiel: Angenommen die Auswahlfenster würden ihren Index alle in der globalen Variable $i speichern, dann würdest du, während du im Skillmenü einen Skill auswählst, auch gleichzeitig im Itemmenü und im Kampfaktionsauswahlmenü den Cursor bewegen. Mag ja sein, dass globale Variablen am Anfang erstmal einfacher erscheinen (weil man ja auch im Maker globale Variablen gewohnt ist). Aber es schadet ja nicht, sich von Anfang an den richtigen Stil anzugewöhnen.
Zitat
Der Cursor soll außerhalb eines Fenster angezeigt werden. Und auch über andere Fenster.
Und je nach dem Wert von $smi soll er an einen komplett anderen Platz auf dem Bildschirm, also X und Y werden sich immer unterscheiden.
...
Dann kannst du keinen Window-Cursor verwenden. Der kann nur innerhalb eines Fensters angezeigt werden. Du müsstest eine eigene Sprite_Cursor Klasse schreiben, die überall angezeigt werden kann. Wenn du mal in den früheren Kapiteln meines Kurses blätterst: Dort wird auch erwähnt wie man Menüs aus Sprites erzeugt und eigene Cursor zeichnet.
Achso. Aber nur mal so nebenbei: Bei was wäen globale Variable sinnvoll?
Und zur Sprite_Cursor: Yay, eine Herausforderung für mich Das war dann alles, was ich wissen wollte. Ich probiere das jetzt in den nächsten Tagen, lese mal deinen RGSS-Kurs durch(was ich schon immer mal machen wollte, aber wegen Schule noch keine Zeit hatte).
Also danke ^,^
Und zu Cepanks: Jep, du hattest recht xD Danke
okaj. Allerdings habe ich die Variable schon mehrmals benützt. Und das jetzt alles zu verändern... boah ^,^
Aber ich werde es mal beim nächsten Skript machen.
überprüft ja, ob eine Pfeiltaste bzw. Number-Key gedrückt ist. Aber wie bewerkstellige ich es, dass die Befehle nur dann ausgeführt werden, wenn die entsprechende Pfeiltaste gedrückt wurde?
Btw: Google → RGSS Pfeiltasten abfragen → 3. Ergebnis → Hier landen ^,^
Die Methode dazu sieht so aus =>
Der erste Parameter ist der neue Name des Charsets, der zweite vom Farbton, der dritte ist wieder der Name der Battlergrafik und der 4. wieder der dazugehörige Farbton.
Hallo
Ich habe mir ein Palast erstellt bei dem ich König bin. Und eine Stadt hab ich mir erstellt mit Einkaufsläden.
Dann habe ich mir einen Butler erstellt bei dem man auf die Antwort "Steuern einnehmen" klicken kann. Dann habe ich verschiedene Läden(Waffenladen, Itemshop, Pension, Wirtshaus) auf die man danach klicken kann. Ich möchte es so machen, dass wenn man dan z.b. auf Waffenladen klickt man 1000 Gold erhält. Will aber nicht, dass man das die ganze Zeit machen kann sondern nur so jede Stunde. Und jetzt kommt endlich die Frage^^: wie kann ich das einstellen, das ich einstellen kann das man nur jede Stunde 1000 Gold bekommt nur man hinklickt, nicht einfach so. Und wenn wenn noch keine Stunde vergangen ist und man auf Steuern einnehmen und z.b. auf Waffenladen klick soll so was kommen wie "du kannst nur jede Stunde Steuern einnehmen". Ich hoffe ihr könnt mir beschreiben wie ich das machen kann. Ich habe auch schon ein bisschen Erfahrung mit RPG Maker XP.
------------------------------------------------------------------------------
Programmiere mit RPG Maker XP