RPG-Maker Quartier

Hier dreht sich alles um die RPG-Maker-Reihe von ASCII/Enterbrain. Der RPG-Maker ist ein Tool, mit dem du dir dein eigenes kleines Rollenspiel erstellen kannst. Du findest hier alles, was du dazu brauchst. Aber natürlich umfasst die Community noch mehr!
Aktuelle Zeit: Di Mär 03, 2020 2:58

Alle Zeiten sind UTC + 1 Stunde



Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
Offline
Alex
Alex
Benutzeravatar
Beiträge: 13
BeitragVerfasst: Mi Okt 19, 2011 10:11 
Hallo zusammen,

konnte dazu leider mit der Suchfunktion nichts finden, freue mich über Hilfe:
Ich möchte gerne mit einem Skriptbefehl den Bildausschnitt einfrieren. Der Spieler soll sich frei bewegen können, aber der Bildausschnitt soll nicht mitscrollen. Also eigentlich genau so als wäre die Map nur 20x15 Tiles groß.

Vielen Dank,
r

_________________
www.aborakon.com


Zuletzt geändert von rowertmylk am Fr Okt 21, 2011 7:38, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  

BeitragVerfasst: Mi Okt 19, 2011 16:15 
Hat das einen besonderen Grund, wie ein Minigame oder so?
Dann teleporier den Helden doch einfach auf eine kleinere Map.
Alle Zustände der Events kannst du mit Variablen auch dort rekonstruieren.
Hat den Vorteil, dass noch die Kollisionserkennung zum Rand hin funktioniert.


Nach oben
  
Mit Zitat antworten  
Offline
Alex
Alex
Benutzeravatar
Beiträge: 13
BeitragVerfasst: Mi Okt 19, 2011 17:32 
Danke für die Antwort. Ja es ist für ein Kampfsystem, das direkt in der Spielwelt - also ohne extra Screen - stattfindet. Daher fällt das mit der extra Map aus. Der Aufwand wäre dafür zu groß.

Kollisionserkennung ist kein Problem.

Es müsste im RMXP doch einen entsprechenden Codeabschnitt geben, der den Bildausschnitt kontrolliert bzw. das Scrolling. Vielleicht geht es ja auch umgekehrt und ich deaktiviere das Scrolling? Bloß wie?

_________________
www.aborakon.com


Nach oben
 Profil  
Mit Zitat antworten  
Offline
Official Oldschool
Official Oldschool
Benutzeravatar
Beiträge: 8917
Alter: 31
Wohnort: BRD, Thüringen
BeitragVerfasst: Mi Okt 19, 2011 18:15 
Das Scrolling des Bildschirms wird mit der Variable Game_Map#display_x und Game_Map#display_y festgelegt. Ich glaub das einfachste wäre, alle Zugriffe auf die Variable einfach zu überschreiben:
Code:
class Game_Map
  attr_accessor :scroll_lock
  %W(display_x= display_y= scroll_down scroll_left scroll_right scroll_up).each do |m|
    n = "#{m.sub('=', '')}_with_scroll_lock"
    class_eval %Q{
      alias #{n} #{m}
      def #{m} value
        #{n} value unless @scroll_lock
      end
    }
  end
end


Zum Sperren des Scrollens:
Code:
$game_map.scroll_lock = true


Nachteil: Du kannst die Map auch nicht mehr mit dem Event-Befehl fürs Scrollen ändern. Die Alternative wäre, du suchst in dem Game_Player Script nach allen Aufrufen von $game_map.display_x/y und machst dort die Abfrage rein.

_________________


Nach oben
 Profil ICQ  
Mit Zitat antworten  
Offline
Alex
Alex
Benutzeravatar
Beiträge: 13
BeitragVerfasst: Do Okt 20, 2011 18:52 
Vielen Dank, es funktioniert!

Bloß wenn ich das Scrollen wieder aktivieren möchte, also mit
Code:
$game_map.scroll_lock = FALSE

dann kann ich den Spieler nicht mehr bewegen, das Spiel friert ein. Liegt das daran, das ich mich zwischenzweitlich bewegt habe und eine Neuzentrierung fehlt?


Eine andere Frage:
Im RMXP gibt es ja leider nicht mehr die Store Event ID Funktion. Hier habe ich ein Skript gefunden:
http://www.rpgrevolution.com/forums/ind ... opic=44319

Bloß wie kann ich dann die Event ID einer bestimmten Koordinate in einer Variable speichern? Also statt dem Terrain Tag möchte ich gerne die ID von einem Event, das auf einer bestimmten Position steht.
Was passiert wernn mehrere Events auf einem Tile liegen, wird dann wie so oft nur das Event mit der höchsten ID beachtet?

Danke für die Hilfe.

_________________
www.aborakon.com


Nach oben
 Profil  
Mit Zitat antworten  
Offline
Official Oldschool
Official Oldschool
Benutzeravatar
Beiträge: 8917
Alter: 31
Wohnort: BRD, Thüringen
BeitragVerfasst: Do Okt 20, 2011 19:44 
Das das Spiel einfriert liegt daran, dass der Script...-Befehl kein false zurückgeben darf. Das ist so ein Bug/unsinniges Feature des Makers. Versuch also mal
Code:
$game_map.scroll_lock = false
$game_player.center($game_player.x, $game_player.y)
true

zu schreiben.
Die zweite Zeile zentriert den Bildschirm wieder auf die Koordinaten des Helden.

Zitat:
Was passiert wernn mehrere Events auf einem Tile liegen, wird dann wie so oft nur das Event mit der höchsten ID beachtet?

Code:
# findet ein willkürliches Event auf diesem Feld
event_id = $game_map.events.find {|id, event| event.x == X && event.y == Y}.map {|id, event| id}
# findet alle Events auf diesem Feld
event_ids = $game_map.events.find_all {|id, event| event.x == X && event.y == Y}.map {|id, event| id}

Je nach dem was du verwendest bekommst du eine oder alle Event-IDs der Events auf dem angegebenen Feld. Wenn du die IDs aber in eine Variable abspeichern willst, kommst du ja nicht drumherum nur eine Event-ID zu verwenden. Alternativ kannst du das über 'ne Schleife lösen:
Code:
<>SCRIPT: @event_ids = $game_map.events.find_all {|id, event| event.x == X && event.y == Y}.map {|id, event| id}
<>LOOP:
    <> Conditional Branch Script: @event_ids.empty?
        <> break loop
    <> end branch
    <>SCRIPT: $game_variables[1] = @event_ids.pop
    <> your code here...
<> end loop
<>SCRIPT: @event_ids = nil

_________________


Nach oben
 Profil ICQ  
Mit Zitat antworten  
Offline
Alex
Alex
Benutzeravatar
Beiträge: 13
BeitragVerfasst: Do Okt 20, 2011 20:06 
KD hat geschrieben:
Das das Spiel einfriert liegt daran, dass der Script...-Befehl kein false zurückgeben darf. Das ist so ein Bug/unsinniges Feature des Makers. Versuch also mal
Code:
$game_map.scroll_lock = false
$game_player.center($game_player.x, $game_player.y)
true

zu schreiben.
Die zweite Zeile zentriert den Bildschirm wieder auf die Koordinaten des Helden.

Wunderbar, funktioniert jetzt!

Danke auch für den Event-Code, das werde ich mal probieren.
Bloß ich glaube, damit ist mein Problem noch nicht gelöst.
Ich beschreibe mal, was ich eigentlich machen will: Für ein rundenbasiertes KS will ich die KI checken lassen, was sich auf einem bestimmten Tile abspielt. Das will ich in einer Zahl ausdrücken. Zum Beispiel stehen die Werte 0-9 für bestimmte Terrain-Informationen (blocked, etc.) und die Werte 10-99 für die IDs der Charaktere (Gegner, Helden, usw.). Diese Infos kann ich ja alle selbst mit meinen RMXP-Kenntnissen verwalten.

Ich bräuchte aber dann noch zwei Skriptbefehle, die lauten:

Write [bestimmter Wert] in bestimmte Koordinate [X]/[Y]
Read [Wert, unbekannt] aus bestimmter Koordinate [X]/[Y]

Da wäre es natürlich fein, wenn dieser Wert unabhängig von Terrain, Event, usw... ist. Ich brauche also einfach nur einen weiteren künstlichen Wert, den ich verwalten kann.

Wäre super, wenn Du mir den Code dafür geben könntest! Oder ist das sehr aufwendig?

_________________
www.aborakon.com


Nach oben
 Profil  
Mit Zitat antworten  
Offline
Official Oldschool
Official Oldschool
Benutzeravatar
Beiträge: 8917
Alter: 31
Wohnort: BRD, Thüringen
BeitragVerfasst: Do Okt 20, 2011 23:04 
Dafür bieten sich Tables an. Das sind auch die Datenstrukturen, die die Map-Tiles verwalten.
Code:
class Game_Map
  attr_reader :ks_table
  alias setup_extra_table setup
  def setup *args
    setup_extra_table *args
   @ks_table = Table.new(width, height)
  end
end
class Interpreter
  # shorter access to table through event scripts
  def ks
    $game_map.ks_table
  end
end

Das in den Scripteditor einfügen. Dann hast du eine Tabelle, auf die du in den Eventscripts mit
Code:
ks[X, Y] = VALUE

zugreifen kannst. Es sind allerdings nur Zahlenwerte erlaubt, keine andersartigen Werte. Wenn du z.B. in einem Feld mehrere Zahlenwerte speichern möchtest (weil auf einem Tile mehrere Events stehen können) dann würde ich mir ein anderes System überlegen.

_________________


Nach oben
 Profil ICQ  
Mit Zitat antworten  
Offline
Alex
Alex
Benutzeravatar
Beiträge: 13
BeitragVerfasst: Fr Okt 21, 2011 7:33 
Danke für das Script!

Also wenn ich das dann einbaue, würde ich es so machen:

(zuvor das Script über Main einfügen) und dann für mich vorbereiteN:
$game_variables[1] sei die X-Koordinate
$game_variables[2] sei die Y-Koordinate
$game_variables[3] sei ein temporärer Wert

Und wenn ich dann in ein Tile was reinschreiben will, schreib ich statt:

Code:
ks[X, Y] = VALUE

nun:
Code:
ks[$game_variables[1], $game_variables[2]] = $game_variables[3]


Bloß mit welchem Scriptbefehl lese ich dann den (mir unbekannten) Wert aus einem bestimmten Tile aus (mir ist ja nur X und Y bekannt)?

_________________
www.aborakon.com


Nach oben
 Profil  
Mit Zitat antworten  
Offline
Official Oldschool
Official Oldschool
Benutzeravatar
Beiträge: 8917
Alter: 31
Wohnort: BRD, Thüringen
BeitragVerfasst: Fr Okt 21, 2011 10:42 
Im Prinzip genauso:
Code:
$game_variables[3] = ks[$game_variables[1], $game_variables[2]]

_________________


Nach oben
 Profil ICQ  
Mit Zitat antworten  
Offline
Alex
Alex
Benutzeravatar
Beiträge: 13
BeitragVerfasst: Fr Okt 21, 2011 12:14 
Perfekt, funktioniert! :)

_________________
www.aborakon.com


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de