• Anmelden

MSC

Ankömmling

  • »MSC« ist der Autor dieses Themas

Motto: oha...

  • Nachricht senden

1

Sonntag, 20. Mai 2012, 21:54

Spielerposition in Script Abfragen und auf Kamerascrollen anwenden

Hallo,

ich bin an einem Projekt beschäftigt, in dem es eine Freie Oberwelt Karte mit normalem Kamerascrollen gibt und einigen Dungeons, wo die Kamera Raum für Raum Scrollen soll.

Ich habe im Forum bereits gesucht und etwas annäherndes gefunden, was zumindest das Scrollen der Kamera aktiviert/deaktiviert:
Kamera fixieren - Einsteigerhilfe - RPG Studio - Make your World real

Und nein: ich kann nicht für jedem Raum eine einzelne Map machen, weil mir sonst schnell die Maps ausgehen.
Sowie ist das Bewegen eines NPC Event zu ungenau, da das Game mit Pixelmovement Script (v1.6) läuft.

Ich bin aber bei der Ruby Syntax noch nicht Fit genug und die Internen Benennungen sind mir nicht bekannt.
In etwa so hatte ich mir das überlegt:

Quellcode

1
2
3
4
5
6
7
If $game_switches[1]{
	kamera.x = (floor(spieler.y/20)*20)
	kamera.y = (floor(spieler.y/15)*15)
	# scrolle Kamera
}else{
	# normales kameraverhalten
}

Somit "sollte" die Kamera einen Raum weiter rutschen, wenn man die Grenzen dessen verlässt.
Alle Räume haben auch dicke Wände, sodass es nicht versehentlich zu einem wechsel kommen kann.

Optional ganz nett wär noch, wenn das Scrollen bei einem Raumwechsel "weich" geschehen würde.

Vielen Dank schon mal im Vorraus! :hilfe:

MfG MSC

2

Montag, 21. Mai 2012, 08:33

Die Spieler-Koordinaten kannst du so auslesen:

Ruby Quellcode

1
2
3
4
5
$game_player.x # Für Tile-Koordinaten
$game_player.y
 
$game_player.screen_x # Für pixelgenaue Koordinaten
$game_player.screen_y


Ich habe dieses Script gefunden, was dir vielleicht so schon weiterhilft.
Darin habe ich den Befehl gefunden, um die Kamera zu scrollen:

Ruby Quellcode

1
$game_map.start_scroll(Richtung, Anzahl Felder, Geschwindigkeit)


Da dieser nur Tile-genau zu funktionieren scheint, wirst du vielleicht gezwungen sein, das Scrollen selbst zu schreiben, du kannst einfach die Screen-Koordinaten direkt setzen mit:

Ruby Quellcode

1
2
$game_map.display_x
$game_map.display_y


Ich konnte nichts ausprobieren und bin mir auch nicht zu 100% sicher, aber ich hoffe trotzdem, dir geholfen zu haben. ;D
.Leo

MSC

Ankömmling

  • »MSC« ist der Autor dieses Themas

Motto: oha...

  • Nachricht senden

3

Montag, 21. Mai 2012, 11:25

Vielen Dank!
Ich werde es heute Abend ausprobieren.

MfG MSC

MSC

Ankömmling

  • »MSC« ist der Autor dieses Themas

Motto: oha...

  • Nachricht senden

4

Montag, 21. Mai 2012, 19:07

Hab es mal so versucht, aber es wirft mir einen Fehler:

Zitat

Script 'DungeonCam' line 2: No Method Error occurered.

undefined method `[]' for nil:NilClass

Ruby Quellcode

1
2
3
4
5
6
class Game_Map
  if $game_switches[1] == true
	$game_map.display_x = (Math.floor($game_player.x/20)*20)
	$game_map.display_y = (Math.floor($game_player.y/15)*15)
  end
end

Wobei ich den Fehler seltsam finde, ich habe alle Dateien durchsuchen lassen und es gibt bereits ähnliche aufrufe ser Switches "weiter oben" in den Script Daten.


Wenn ich mich mehr an das verlinkte Bespiel halte und die Syntax so baue geht es auch nicht und wirft mir diesen Fehler:

Zitat

Script 'DungeonCam' line 9: SyntaxError occurred.

Ruby Quellcode

1
2
3
4
5
6
7
8
9
class Game_Map
  return if scrollen
	$game_map.display_x = (Math.floor($game_player.x/20)*20)
	$game_map.display_y = (Math.floor($game_player.y/15)*15)
  end
  def scrollen
	return $game_switches[1]
  end
end


Ich gehe mal davon aus, dass es ein ganz banaler Fehler ist, oder?

MfG MSC

5

Freitag, 25. Mai 2012, 09:11

Der Syntaxerror rührt wahrscheinlich vom end in der 5. Zeile, das schliesst nämlich class Game_Map direkt wieder, einfach entfernen.

Den ersten Fehler kann ich mir so nicht erklären, da muss dir wohl jemand anders helfen, sorry...
.Leo

MSC

Ankömmling

  • »MSC« ist der Autor dieses Themas

Motto: oha...

  • Nachricht senden

6

Freitag, 25. Mai 2012, 18:18

Nein, das geht leider auch nicht.

Reborn

hat beim Stromkonzern schon Rabatt

Motto: Wer noch was vom Wochenende weis, hat es nie erlebt!

  • Nachricht senden

7

Freitag, 25. Mai 2012, 18:40

Das ist eigentlich ziemlich einfach:

Ruby Quellcode

1
2
3
4
5
6
class Game_Map
  if $game_switches[1] == true
	$game_map.display_x = (Math.floor($game_player.x/20)*20)
	$game_map.display_y = (Math.floor($game_player.y/15)*15)
  end
end

Der Interpreter versucht schon, beim laden des Quelltextes in den Ram, auf die Methode [] von $game_swichtes zuzugreifen, da diese aber erst in der Scene_Title (glaub) deklariert und initialisiert wird schmeißt es da logischerweise einen Fehler. Es wäre am besten wenn du diese Abfrage in eine Methode packst und diese erst nach dem Aufruf von $game_swichtes = Game_Switches.new() aufrufst.

Ruby Quellcode

1
2
3
4
5
6
7
8
9
class Game_Map
  return if scrollen
	$game_map.display_x = (Math.floor($game_player.x/20)*20)
	$game_map.display_y = (Math.floor($game_player.y/15)*15)
  end
  def scrollen
	return $game_switches[1]
  end
end

Return ist nur in Methoden erlaubt und die Return-Methode verlangt kein end.
Mehr als a Allgäuer ka a Mensch it wera.


Wie soll ich wissen was ich denke, bevor ich nicht höre was ich sage?


Spoiler: OpenSource-Projects
NES-Emulator - a simple NES-Emulator
ERDL - a embedded Ruby Interpreter with the abilltiy to render images with DirectX ERDL shall be 100% compatible to RPGXP-Ruby Scripts
zum Lesen den Text mit der Maus markieren

MSC

Ankömmling

  • »MSC« ist der Autor dieses Themas

Motto: oha...

  • Nachricht senden

8

Samstag, 26. Mai 2012, 16:16

Ah, ok...
Leider versteht ich nur Bahnhof.

Wie gesagt, ich bin mit der seltsamen Ruby Syntax nicht vertraut.

Der 1. Block ist so, wie ich es von anderen Sprachen gewohnt wäre.
Mein Script liegt direkt vor Main.

Bei dem 2. Block habe ich ein anderes, funktionierendes Beispiel auf meine Bedürfnisse abgeändert.