PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Warum färben sich Show Picture bei Tintscreen nicht mit?



Ken der Kot
21.05.2018, 13:06
Frage steht oben, Vx Ace.

Grüßlies

Kenos da Kotos

real Troll
21.05.2018, 13:40
Bilder werden von der Bildschirmeinfärbung nicht erfasst, weil sie eine Prioritätsebene hoher angezeigt werden. Wenn du jedoch das Bild per zusätzlichem Change-Tone-Befehl (auf Seite 2 der Event-Befehle) entsprechend dem Bildschirm färbst, sieht es für den Spieler so aus, als färbe sich alles gleichermaßen ein.

Ken der Kot
21.05.2018, 17:27
Ok, das ist ja blöd... also alle Bilder separat einfärben? Führt ja zu vielen Abfragen wenn man ein Tag-Nacht-System o.ä. verwendet. Kann man die Priorität nicht vielleicht via Skript auf dieselbe Ebene legen, sodass Bilder mit dem Tintscreen auch mitgefärbt werden?

Grüßlies

Kenis del Kotis

Mordechaj
22.05.2018, 10:28
Die Ebenenpriorität lässt sich meines Wissens nicht ändern, und selbst wenn, würdest du wahrscheinlich dadurch allerlei Probleme bekommen. Wofür nutzt du denn Show Picture aktuell, dass du das Bild mit eingefärbt haben möchtest? Der Vorteil des Befehls ist ja gerade, dass er von der Ebenenhierarchie der Map unabhängig ist. Für Animationen ist das übrigens meines Wissens genauso. That being said, es gab letztes Jahr wohl einen Steam-User, der genau das Gegenteil deines Problems hatte (https://steamcommunity.com/app/220700/discussions/2/537402115088145574/), wo ein Script offenbar dazu geführt hat, dass der Tint auch Picture betraf.

Ich weiß leider gerade nicht, wie der Ace Pictures handhabt, bei den älteren Generationen wird eine ID an das Einzelbild vergeben und so Sachen wie Tone, Blending und Position etc. werden über "Move Picture" zur entsprechenden Nummer gehändelt; die Nummer ist gleichzeitig die Anzeigepriorität. Wenn das der Ace auch so macht, könntest du einfach einen Verbundbefehl einrichten, der alle Bilder wie den Screen einfärbt, sprich:
Tint Screen (xxx,yyy,zzz)
Tint Picture #1 (xxx,yyy,zzz)
Tint Picture #2 (xxx,yyy,zzz)
Tint Picture #usw

Sicher ließe sich dafür auch ne Method in einem Script bauen, das müsste aber jemand anderes als ich machen, ich bin nur der Meister der Teillösungen!

Weniger Teillösung als echte Lösung wäre, das Tinting durch ein Picture Overlay zu leisten. Dann hättest du den Tint auf der höchstmöglichen Anzeigeebene und sogar noch etwas mehr Kontrolle darüber (Blending, Opacity, Tint im Tint; Verläufe, Formen etc.). Das ist zwar keineswegs ein verlustfreies Verfahren, das sind Tintscreen/Screentone meines Wissens allerdings auch nicht.

Ken der Kot
22.05.2018, 11:52
Aber Wettereffects färben auch die Pictures mit, wie ich gerade erfahr. Das bedeutet ja man müsste da nur irgendwie schauen, daß man die Färbung irgendwie selbst bestimmen kann. Geht das denn irgendwie infacher?

Grüße

Dein Ken der Kot

Mordechaj
22.05.2018, 18:44
Was für ein Script nutzt du denn für die Wettereffekte?

Cepanks
22.05.2018, 19:30
Sieh dir mal das Script "Spriteset_Map" an, das Einfärben findet in update_viewports statt.

#--------------------------------------------------------------------------
# * Update Viewport
#--------------------------------------------------------------------------
def update_viewports
@viewport1.tone.set($game_map.screen.tone)
@viewport1.ox = $game_map.screen.shake
@viewport2.color.set($game_map.screen.flash_color)
@viewport3.color.set(0, 0, 0, 255 - $game_map.screen.brightness)
@viewport1.update
@viewport2.update
@viewport3.update
end
Die erste Zeile der Methode ist hier das Problem. Tint Screen beinflusst nur Sachen die mit "viewport1" als Viewport erstellt wurden (@viewport1.tone.set($game_map.screen.tone)). Pictures und Wetter haben aber beide "viewport2" (Deshalb beinflusst das Wetter die Pictures, was ich aber eher als Bug bezeichnen würde...)

In der Theorie sollte es genügen, Pictures "viewport1" zuzuweisen, führt aber vermutlich zu Prioritätsproblemen. Aber wir können auch einfach einen eigenen Viewport erstellen und den mit den Werten von Tint Screen einfärben.

Versuch mal folgendes in einen neuen Scriptslot einfügt:

class Spriteset_Map
alias :original_create_viewports :create_viewports
def create_viewports
original_create_viewports
@picture_viewport = Viewport.new
@picture_viewport.z = 49
end

def update_pictures
$game_map.screen.pictures.each do |pic|
@picture_sprites[pic.number] ||= Sprite_Picture.new(@picture_viewport, pic)
@picture_sprites[pic.number].update
end
end

alias :original_update_viewports :update_viewports
def update_viewports
original_update_viewports
@picture_viewport.tone.set($game_map.screen.tone)
@picture_viewport.ox = $game_map.screen.shake
end

alias :original_dispose_viewports :dispose_viewports
def dispose_viewports
original_dispose_viewports
@picture_viewport.dispose
end
end
Pictures werden nun auch von Shake Screen beinflusst. Wenn du das nicht willst, die Zeile @picture_viewport.ox = $game_map.screen.shake auskommentieren/löschen.
Ungetestet, da ich hier keinen Maker installiert sondern nur die Scripte rumliegen habe.

Ken der Kot
22.05.2018, 21:06
Scheint zu klappen. Danke, Cepanks. Bester Mann!

Grüße

Dein Ken der Kot