-
Hallo Community,
momentan arbeite ich an einem kleinen Projekt und habe ein sehr ärgerliches Problem.
Es geht um eine 49x45 Tiles große Map, welche Fackeln an den Wänden aufweist, insgesamt sind es 32.
Jedenfalls soll jede dieser Fackeln auch brennen. Nun wollte ich es umgehen, diese Map mit 32 zusätzlichen
Events zu belasten, also habe ich einen großen Fog erstellt, der die Flammen enthält. Dieser sollte sich alle 5 Frames
ändern, da die Flammen 4-fach animiert sind. Das Problem ist nur, dass das Spiel dann alle 5 Frames stockt...
Habe gerade mal probiert das ganze in ein riesiges (6272x5760 Pixel großes) Charset zu packen, dieses jedoch lässt
sich nicht in das Projekt importieren (von wegen unbegrenzte Charset Größen im Rpg maker Xp).
Zwar könnte ich diese 32 Events in weitaus weniger Charsets zusammenfassen, aber vielleicht weiß jemand von euch
eine bessere Lösung, würde das ganze eigentlich sehr gerne über den Fog regeln.
MfG, diäitsch
-
Das hängt damit zusammen, dass der Maker nicht ordentlich cacht. Die Fogs werden jedes Mal neu aus der Datei geladen. Im Scripteditor ab Zeile 108 findest du
Code:
if @fog.bitmap != nil
@fog.bitmap.dispose
@fog.bitmap = nil
end
Hier die Zeile mit dem Dispose auskommentieren (# davor schreiben), so dass da steht
Code:
if @fog.bitmap != nil
# @fog.bitmap.dispose
@fog.bitmap = nil
end
Aber Achtung: Wenn du viele verschiedene Fogs einsetzt und die nie gelöscht werden, kann das auf Dauer den Speicher belasten. Ein Kompromiss wäre, Fogs pro Map zu cachen. Das sieht
dann so aus:
Code:
if @fog.bitmap != nil
# @fog.bitmap.dispose
(@used_fogs ||= {})[@fog.bitmap] = true
@fog.bitmap = nil
end
Und dann bei dispose (ab Zeile 58)
Code:
def dispose
# Dispose of tilemap
@tilemap.tileset.dispose
for i in 0..6
@tilemap.autotiles[i].dispose
end
@tilemap.dispose
# Dispose of panorama plane
@panorama.dispose
# Dispose of fog plane
# edit
if @used_fogs
@used_fogs.each_key {|fog| fog.dispose unless fog.disposed?}
@used_fogs.clear
end
# Dispose of character sprites
for sprite in @character_sprites
sprite.dispose
end
-
Genial! Velen Dank für deine schnelle Hilfe. :)
-
Guten Morgen,
ich habe eine Frage und zwar habe ich die Schriftfarbe meines Projekts von weiß in schwarz geändert, jedoch gibt es noch zwei Dinge,
die noch immer in weißer Schrift angezeigt werden und bei denen ich im Script-Editor nichts finde. Dies sind zum einen die Auswahlmöglichkeiten
des Shop processing (Buy, Sell, Quit), zum anderen ist das die Anzeige "miss" im Kampfsystem. Kann mir jemand sagen wo ich das ebenfalls
ändern kann?
-
Wo genau hast du die Font.color in deinem Projekt geändert?
Für diverse Fenster werden im XP fest vordefinierte Farben verwendet welche du in der Klasse "Window_Base" ändern kannst.
Für die Schrift im Kampfsystem musst du die Klasse "RPG::Sprite" ändern welche jedoch nicht im Script-Editor vorhanden ist sondern versteckt im RGSS.
Du kannst den Quellcode der Klasse in der Hilfedatei des Makers betrachten und musst ihn im Script-Editor überschreiben um die Schriftfarbe ändern zu können.
-
Habe sie in der Window Base geändert.
Wenn ich jetzt darüber nachdenke wäre es evtl. besser die Farbe im KS weiß zu lassen, jedoch stört die weiße "Farbe"
im Shop processing. Habe mal in der Hilfsdatei nachgesehen, kann diesbezüglich aber nichts finden.
-
Also wie gesagt, bin mit allem zufrieden, verstehe halt nur nicht wieso im Shop processing nur diese drei Auswahlmöglichkeiten noch in weißer Schrift
angezeigt werden. Auch ist es mir ein Rätsel wo man das ändern kann. Man sollte doch meinen dass sich dies dort ändern lasse, wo man auch die
Schriftfarben der anderen Wörter ändern kann, welche ebenfalls im Shop processing angezeigt werden...
-
Ich habe mich nocheinmal durch das Script gelesen. Es werden dort nur die Farben verwendet welche in der Window_Base-Klasse angegeben werden, nämlich: normal_color, system_color und disabled_color.
-
Hm, seltsam. Dann werde ich wohl etwas übersehen haben, hier meine Window-Base-Class:
PHP-Code:
#==============================================================================
# ** Window_Base
#------------------------------------------------------------------------------
# This class is for all in-game windows.
#==============================================================================
class Window_Base < Window
#--------------------------------------------------------------------------
# * Object Initialization
# x : window x-coordinate
# y : window y-coordinate
# width : window width
# height : window height
#--------------------------------------------------------------------------
def initialize(x, y, width, height)
super()
@windowskin_name = $game_system.windowskin_name
self.windowskin = RPG::Cache.windowskin(@windowskin_name)
self.x = x
self.y = y
self.width = width
self.height = height
self.z = 100
end
#--------------------------------------------------------------------------
# * Dispose
#--------------------------------------------------------------------------
def dispose
# Dispose if window contents bit map is set
if self.contents != nil
self.contents.dispose
end
super
end
#--------------------------------------------------------------------------
# * Get Text Color
# n : text color number (0-7)
#--------------------------------------------------------------------------
def text_color(n)
case n
when 0
return Color.new(-255, -255, -255, 255)
when 1
return Color.new(-255, -255, -255, 255)
when 2
return Color.new(-255, -255, -255, 255)
when 3
return Color.new(-255, -255, -255, 255)
when 4
return Color.new(-255, -255, -255, 255)
when 5
return Color.new(-255, -255, -255, 255)
when 6
return Color.new(-255, -255, -255, 255)
when 7
return Color.new(-255, -255, -255, 255)
else
normal_color
end
end
#--------------------------------------------------------------------------
# * Get Normal Text Color
#--------------------------------------------------------------------------
def normal_color
return Color.new(-255, -255, -255, 255)
end
#--------------------------------------------------------------------------
# * Get Disabled Text Color
#--------------------------------------------------------------------------
def disabled_color
return Color.new(-255, -255, -255, 255)
end
#--------------------------------------------------------------------------
# * Get System Text Color
#--------------------------------------------------------------------------
def system_color
return Color.new(-255, -255, -255, 255)
end
#--------------------------------------------------------------------------
# * Get Crisis Text Color
#--------------------------------------------------------------------------
def crisis_color
return Color.new(-255, -255, -255, 255)
end
#--------------------------------------------------------------------------
# * Get Knockout Text Color
#--------------------------------------------------------------------------
def knockout_color
return Color.new(-255, -255, -255)
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
super
# Reset if windowskin was changed
if $game_system.windowskin_name != @windowskin_name
@windowskin_name = $game_system.windowskin_name
self.windowskin = RPG::Cache.windowskin(@windowskin_name)
end
end
#--------------------------------------------------------------------------
# * Draw Graphic
# actor : actor
# x : draw spot x-coordinate
# y : draw spot y-coordinate
#--------------------------------------------------------------------------
def draw_actor_graphic(actor, x, y)
bitmap = RPG::Cache.character(actor.character_name, actor.character_hue)
cw = bitmap.width / 4
ch = bitmap.height / 4
src_rect = Rect.new(0, 0, cw, ch)
self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect)
end
#--------------------------------------------------------------------------
# * Draw Name
# actor : actor
# x : draw spot x-coordinate
# y : draw spot y-coordinate
#--------------------------------------------------------------------------
def draw_actor_name(actor, x, y)
self.contents.font.color = normal_color
self.contents.draw_text(x, y, 120, 32, actor.name)
end
#--------------------------------------------------------------------------
# * Draw Class
# actor : actor
# x : draw spot x-coordinate
# y : draw spot y-coordinate
#--------------------------------------------------------------------------
def draw_actor_class(actor, x, y)
self.contents.font.color = normal_color
self.contents.draw_text(x, y, 236, 32, actor.class_name)
end
#--------------------------------------------------------------------------
# * Draw Level
# actor : actor
# x : draw spot x-coordinate
# y : draw spot y-coordinate
#--------------------------------------------------------------------------
def draw_actor_level(actor, x, y)
self.contents.font.color = system_color
self.contents.draw_text(x, y, 32, 32, "Lv")
self.contents.font.color = normal_color
self.contents.draw_text(x + 32, y, 24, 32, actor.level.to_s, 2)
end
#--------------------------------------------------------------------------
# * Make State Text String for Drawing
# actor : actor
# width : draw spot width
# need_normal : Whether or not [normal] is needed (true / false)
#--------------------------------------------------------------------------
def make_battler_state_text(battler, width, need_normal)
# Get width of brackets
brackets_width = self.contents.text_size("[]").width
# Make text string for state names
text = ""
for i in battler.states
if $data_states[i].rating >= 1
if text == ""
text = $data_states[i].name
else
new_text = text + "/" + $data_states[i].name
text_width = self.contents.text_size(new_text).width
if text_width > width - brackets_width
break
end
text = new_text
end
end
end
# If text string for state names is empty, make it [normal]
if text == ""
if need_normal
text = "[Normal]"
end
else
# Attach brackets
text = "[" + text + "]"
end
# Return completed text string
return text
end
#--------------------------------------------------------------------------
# * Draw State
# actor : actor
# x : draw spot x-coordinate
# y : draw spot y-coordinate
# width : draw spot width
#--------------------------------------------------------------------------
def draw_actor_state(actor, x, y, width = 120)
text = make_battler_state_text(actor, width, true)
self.contents.font.color = actor.hp == 0 ? knockout_color : normal_color
self.contents.draw_text(x, y, width, 32, text)
end
#--------------------------------------------------------------------------
# * Draw EXP
# actor : actor
# x : draw spot x-coordinate
# y : draw spot y-coordinate
#--------------------------------------------------------------------------
def draw_actor_exp(actor, x, y)
self.contents.font.color = system_color
self.contents.draw_text(x, y, 24, 32, "E")
self.contents.font.color = normal_color
self.contents.draw_text(x + 24, y, 84, 32, actor.exp_s, 2)
self.contents.draw_text(x + 108, y, 12, 32, "/", 1)
self.contents.draw_text(x + 120, y, 84, 32, actor.next_exp_s)
end
#--------------------------------------------------------------------------
# * Draw HP
# actor : actor
# x : draw spot x-coordinate
# y : draw spot y-coordinate
# width : draw spot width
#--------------------------------------------------------------------------
def draw_actor_hp(actor, x, y, width = 144)
# Draw "HP" text string
self.contents.font.color = system_color
self.contents.draw_text(x, y, 32, 32, $data_system.words.hp)
# Calculate if there is draw space for MaxHP
if width - 32 >= 108
hp_x = x + width - 108
flag = true
elsif width - 32 >= 48
hp_x = x + width - 48
flag = false
end
# Draw HP
self.contents.font.color = actor.hp == 0 ? knockout_color :
actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color
self.contents.draw_text(hp_x, y, 48, 32, actor.hp.to_s, 2)
# Draw MaxHP
if flag
self.contents.font.color = normal_color
self.contents.draw_text(hp_x + 48, y, 12, 32, "/", 1)
self.contents.draw_text(hp_x + 60, y, 48, 32, actor.maxhp.to_s)
end
end
#--------------------------------------------------------------------------
# * Draw SP
# actor : actor
# x : draw spot x-coordinate
# y : draw spot y-coordinate
# width : draw spot width
#--------------------------------------------------------------------------
def draw_actor_sp(actor, x, y, width = 144)
# Draw "SP" text string
self.contents.font.color = system_color
self.contents.draw_text(x, y, 32, 32, $data_system.words.sp)
# Calculate if there is draw space for MaxHP
if width - 32 >= 108
sp_x = x + width - 108
flag = true
elsif width - 32 >= 48
sp_x = x + width - 48
flag = false
end
# Draw SP
self.contents.font.color = actor.sp == 0 ? knockout_color :
actor.sp <= actor.maxsp / 4 ? crisis_color : normal_color
self.contents.draw_text(sp_x, y, 48, 32, actor.sp.to_s, 2)
# Draw MaxSP
if flag
self.contents.font.color = normal_color
self.contents.draw_text(sp_x + 48, y, 12, 32, "/", 1)
self.contents.draw_text(sp_x + 60, y, 48, 32, actor.maxsp.to_s)
end
end
#--------------------------------------------------------------------------
# * Draw Parameter
# actor : actor
# x : draw spot x-coordinate
# y : draw spot y-coordinate
# type : parameter type (0-6)
#--------------------------------------------------------------------------
def draw_actor_parameter(actor, x, y, type)
case type
when 0
parameter_name = $data_system.words.atk
parameter_value = actor.atk
when 1
parameter_name = $data_system.words.pdef
parameter_value = actor.pdef
when 2
parameter_name = $data_system.words.mdef
parameter_value = actor.mdef
when 3
parameter_name = $data_system.words.str
parameter_value = actor.str
when 4
parameter_name = $data_system.words.dex
parameter_value = actor.dex
when 5
parameter_name = $data_system.words.agi
parameter_value = actor.agi
when 6
parameter_name = $data_system.words.int
parameter_value = actor.int
end
self.contents.font.color = system_color
self.contents.draw_text(x, y, 120, 32, parameter_name)
self.contents.font.color = normal_color
self.contents.draw_text(x + 120, y, 36, 32, parameter_value.to_s, 2)
end
#--------------------------------------------------------------------------
# * Draw Item Name
# item : item
# x : draw spot x-coordinate
# y : draw spot y-coordinate
#--------------------------------------------------------------------------
def draw_item_name(item, x, y)
if item == nil
return
end
bitmap = RPG::Cache.icon(item.icon_name)
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
self.contents.font.color = normal_color
self.contents.draw_text(x + 28, y, 212, 32, item.name)
end
end
-
Ich habe es gerade einmal mit deinem Script getestet.
Wie es aussieht liegt der Fehler hier in der Klasse "Window_ShopCommand", in dieser Klasse wird nämlich tatsächlich garkeine Farbe für die Schrift eingestellt, deshalb wird die standard Farbe verwendet welche bei deinem Projekt wahrscheinlich Weiß ist.
Du hast zwei Möglichkeiten welche beide sehr simpel sind. Du veränderst die Klasse "Window_ShopCommand" und fügst einfach eine Zeile ein um die Farbe zu setzen wie in diesem Beispiel hier:
Code:
def initialize
super(0, 64, 480, 64)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.color = normal_color
@item_max = 3
@column_max = 3
@commands = ["Buy", "Sell", "Exit"]
refresh
self.index = 0
end
Oder du änderst auch die standard Schriftfarbe in deinem Projekt auf Schwarz, das geht über folgende Zeile welche du lediglich irgendwann vor Beginn des eigentlichen Spiels, also am besten in der Main-Funktion, aufrufst:
Code:
Font.default_color = Color.new(0,0,0,255)
-
Vielen Dank für die Hilfe, Cornix.
Habe es mit deiner zweiten Variante gelöst. Klappt einwandfrei. :)
-
Guten Abend Community,
ich habe eine Frage zu Pictures, welche auf dem Battle Screen angezeigt werden.
Ist es irgendwie möglich diese direkt nach dem Kampf wieder verschwinden zu lassen?
Bekomme es nicht hin, habe es mit Switches, Conditional Branches und sogar Labels versucht,
nichts funktioniert. Beim nächsten Kampf ist das Picture noch immer vorhanden. Problematisch ist
dies wenn besagtes Picture nicht auf den (anderen) Battleback passt. Natürlich kann man durch
Erase Picture das Bild verschwinden lassen, aber trotzdem ist das Bild ca. eine Sekunde zu sehen.
Es müsste doch auch irgendwie direkt nach einem Kampf (und nicht direkt zu Beginn des nächsten
Kampfes) möglich sein, oder?
Hoffe jemand kann mir helfen.
MfG, diäitsch
-
Vielleicht noch wichtig zu erwähnen:
Es geht um die Einstellungen des Punktes "Troops" in der Database.
Edit: Es ist einfach unglaublich, wie schwierig Enterbrain es den Nutzern des Rpg Maker Xp
macht, jetzt habe ich versucht zu trixen, in dem ich vor dem Kampf den Screencolor Tone
herunterschraube (-255, -255, -255, 0) und erst eine halbe Sekunde nach Kampfbeginn
wieder normalisiere. Würde auch sicherlich in Verbindung mit Fogs statt Pictures super
funktionieren, aber anscheinend werden im Kampf keine Fogs angezeigt!
-
ich weiß nicht obs noch aktuell ist, aber willst du das ganze auch für Random-battles oder nur für bestimmte Bossbattles die du über Event einstellst?
Theoretisch könnt ich dir da was schreiben, damt sowas klappt, bräuchte blos ein paar genauere Infos dafür.
-
Gedacht war das für bestimmte Kämpfe.
Habe das jetzt aber anders gelöst, trotzdem danke.