• Anmelden

1

Dienstag, 21. Februar 2012, 14:50

Viewport von Ereignissen aktualisiert sich nicht

Hallo zusammen,

ich will die Viewports einiger Charaktere während dem Spiel ändern. Initialisiert wird das bei mir momentan in initialize in Spriteset_Map. Den gleichen Abschnitt hab ich auch in update in Spriteset_Map kopiert:

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
for i in $game_map.events.keys.sort
if $scene.is_a?(Scene_Map)
evname = $game_map.events[i].event.name
if evname.include? "%"
# Wenn "%" im Namen ist, ist der viewport 2 wenn Switch 11 an ist
if $game_switches[11] == true
viewport = @viewport2
else
viewport = @viewport1
end
else
viewport = @viewport1
end
else
viewport = @viewport1
end
sprite = Sprite_Character.new(viewport, $game_map.events[i])
@character_sprites.push(sprite)
end


$game_switches[11] ist der Schalter, der bestimmt, ob alle Ereignisse mit "%" im Namen einen höheren Viewport haben soll.

Das funktioniert beim Initialisieren und auch, wenn ich $game_switches[11] während dem Spiel aktiviere.

Problem: Wenn ich im Spiel $game_switches[11] ausschalte, wird zwar anscheinend der Viewport der entsprechenden Ereignisse auf 1 zurückgesetzt, sie werden aber trotzdem noch mit Viewport 2 angezeigt.
Erst wenn ich kurz das Menü aufrufe und wieder schließe werden sie wieder mit Viewport 1 angezeigt.

Ich bräuchte also eine Art Funktion, um die Viewports zu aktualisieren... Hab schon einiges ausprobiert, aber nichts funktioniert.

Hat jemand eine Ahnung, wie das gehen könnte?

2

Dienstag, 21. Februar 2012, 14:54

$game_map.need_refresh = true

sollte helfen. Grundlegend benötigt der RmXP zum updaten von ebenen immer ein update der Map+Tiles+Ereignisse darauf.
There was a Cave,
below a Silent's Grave.
Tunnels, extending far, running wide,
going deep into the World on the other Side.
Poor little Child, that was to brave,
died painfully deep down, in the Devil's Cave.

3

Dienstag, 21. Februar 2012, 16:31

Danke, Espér.
Hab deinen Aufruf jetzt an allen möglichen Stellen eingebaut und herumprobiert, leider passiert trotzdem gar nichts...

Was ich mich da aber auch frage: Warum funktioniert das Aktualisieren, nachdem der Viewport auf 2 gesetzt wurde, aber nicht, nachdem er auf 1 gesetzt wurde?

4

Samstag, 25. Februar 2012, 13:22

Hat da niemand eine Ahnung?

5

Dienstag, 28. Februar 2012, 18:55

Ruby Quellcode

1
2
3
4
for sprite in @character_sprites
sprite.dispose
end
@character_sprites.clear


Das gehört direkt vor deinem Code aufgerufen. Im Moment scheinst du die alten Character-Sprites nicht zu entfernen, sondern lediglich die neuen am Ende des Arrays hinzuzufügen. Somit sind zwei Sprites mit unterschiedlichem Viewport vorhanden. Deshalb funktioniert es wenn du den Switch andrehst, aber nicht, wenn du ihn ausdrehst.

Übrigens, die Update-Methode der Spriteset-Map ist dafür definitiv der falsche Platz. @spriteset.update wird in $scene pro Frame ausgeführt, d.h. auch dein Code. Hab nicht so viel Zeit gerade zum Erklären, aber du müsstest schauen dass dein Code nur ausgeführt wird, wenn ein Switch geändert wird. Irgendwo in der Klasse Game_Map müsste das überprüft werden, wenn ich nicht irre (siehe Chaosgod Esper's Beitrag).

ODER, das wäre auch ne Möglichkeit: Lass das ganze in der Update Methode. Speicher den aktuellen Wert des Game-Switches 11 in einer Klassen-Variable. Nun noch ne if-Abfrage in deinen Code ob sich die Variable geändert hat, wenn ja: deinen Code ausführen, Variable erneut speichern. Auch Performancetechnisch sehr sehr viel besser.
Terranigma 2 - Episode I - Open Beta out now!

RPC - Rpg-Maker Community Platform - Spielübergreifende Erfolge und mehr!

6

Dienstag, 28. Februar 2012, 21:29

Danke, King, das funktioniert (zumindest, wenn ich noch den Held selbst dann auch noch neu zeichnen lasse)!

Ich hatte das bisher auch schon mit einem Kontroll-Switch gemacht und es nur auf Anfrage aktualisieren lassen, davor ging die Leistung echt in den Keller. Trotzdem danke für den Hinweis.

Social Bookmarks