Archiv verlassen und diese Seite im Standarddesign anzeigen : [Ace] KS Flash über Pictures
diäitsch
02.07.2013, 11:46
Hallo Community,
ich hätte eine Frage bezüglich des Kampfsystems des Rpg Maker Vx Ace.
Und zwar versuche ich via Pictures die Illusion eines Side View Kampfsystems zu erschaffen (ja, mir ist bewusst, dass es für solch ein KS Scripts gibt, auf diese würde ich jedoch gerne verzichten). Es ist jedoch so, dass diese Pictures (das eigene Team) stets über Animationen, dem Screen Flash et cetera liegen. Weiß jemand, wo man was wie umschreiben muss, damit sich Pictures im KS so verhalten, wie Battler Grafiken?
MfG, diäitsch
MagicMaker
02.07.2013, 12:03
Den Z-Wert der Grafiken unter den Animationsbereich schieben bzw auf Höhe mit den Monstern setzen.
Sollte irgendwo dokumentiert oder ablesbar sein.
So wie es MagicMaker sagt.
Oder, um es technisch etwas sauberer zu machen (falls du die nötigen Kenntnisse und Fähigkeiten besitzt) alles in einen neuen Viewport auslagern. Der Viewport mit den Charaktersprites wäre dann unter dem Viewport mit den Animationen.
diäitsch
03.07.2013, 09:47
Naja, dass es "irgendwo" festgelegt sein muss, ist mir klar, die Frage ist nur, wo? ;)
Mit RGSS3 kenne ich mich gar nicht aus, ich schätze mal, dass irgendetwas in der "Sprite_Picture" Klasse geändert werden muss, oder?
#==============================================================================
# ** Sprite_Picture
#------------------------------------------------------------------------------
# This sprite is used to display pictures. It observes an instance of the
# Game_Picture class and automatically changes sprite states.
#==============================================================================
class Sprite_Picture < Sprite
#--------------------------------------------------------------------------
# * Object Initialization
# picture : Game_Picture
#--------------------------------------------------------------------------
def initialize(viewport, picture)
super(viewport)
@picture = picture
update
end
#--------------------------------------------------------------------------
# * Free
#--------------------------------------------------------------------------
def dispose
bitmap.dispose if bitmap
super
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
super
update_bitmap
update_origin
update_position
update_zoom
update_other
end
#--------------------------------------------------------------------------
# * Update Transfer Origin Bitmap
#--------------------------------------------------------------------------
def update_bitmap
if @picture.name.empty?
self.bitmap = nil
else
self.bitmap = Cache.picture(@picture.name)
end
end
#--------------------------------------------------------------------------
# * Update Origin
#--------------------------------------------------------------------------
def update_origin
if @picture.origin == 0
self.ox = 0
self.oy = 0
else
self.ox = bitmap.width / 2
self.oy = bitmap.height / 2
end
end
#--------------------------------------------------------------------------
# * Update Position
#--------------------------------------------------------------------------
def update_position
self.x = @picture.x
self.y = @picture.y
self.z = @picture.number
end
#--------------------------------------------------------------------------
# * Update Zoom Factor
#--------------------------------------------------------------------------
def update_zoom
self.zoom_x = @picture.zoom_x / 100.0
self.zoom_y = @picture.zoom_y / 100.0
end
#--------------------------------------------------------------------------
# * Update Other
#--------------------------------------------------------------------------
def update_other
self.opacity = @picture.opacity
self.blend_type = @picture.blend_type
self.angle = @picture.angle
self.tone.set(@picture.tone)
end
end
Also es würde schon so reichen, wie MagicMaker es vorgeschlagen hat. Das mit den anders ausgelegten Viewports kling nämlich um einiges aufwendiger...
Du siehst in deinem Code eine Methode namens:
#--------------------------------------------------------------------------
# * Update Position
#--------------------------------------------------------------------------
def update_position
self.x = @picture.x
self.y = @picture.y
self.z = @picture.number
end
Dort kannst du die Z-Koordinate einfach umstellen. Zum Beispiel kannst du
self.z = @picture.number + 100schreiben um alle Pictures um 100 Einheiten höher zeichnen zu lassen.Allerdings würde ich schätzen, dass die Pictures bereits in einem anderen Viewport liegen und dies daher keinen Effekt haben wird. Ausprobieren kannst du es aber trotzdem einmal.
diäitsch
03.07.2013, 10:40
Hm, ich denke, du meinst wohl - 100, oder?
Naja, habe es mit - 100 und + 100 ausprobiert, aber wie du richtig vermutet hast, hat es keinen Effekt.
Scheint also doch aufwendiger zu sein, als "einfach eine Zeile umzuschreiben"... Schade, dass Enterbrain es immer so kompliziert machen muss. Wäre besser, wenn man den anzuzeigenden Pictures statt "nur" posiviven Werten auch Negative zuweisen könnte.
Enterbrain hat es an dieser Stelle richtig gemacht.
Die verschiedenen Viewports trennen gewisse "Arten" von Grafiken.
Pictures und Battle-Animations sollen in einer gewissen Ordnung vorliegen, die gewählte Ordnung ist, dass Pictures immer über den Battle-Animations sind.
Das kann man als vorteilhaft oder nicht ansehen, aber es ist auf jedenfall konsequent.
In diesem Fall machst du es auf eine Quick-&-Dirty Variante die zu dem Problem führt. Du versuchst Pictures für Charaktere zu missbrauchen, und dafür sind sie nicht gedacht.
Die "ordentlich" Lösung wäre es die Battle-Sprites selbst zu schreiben und die Spriteset_Battle-Klasse abzuändern.
diäitsch
04.07.2013, 13:05
Hm, danke für die Aufklärung.
Habe es jetzt über Conditional Branches geregelt. Und zwar sind jetzt alle gegnerischen Animationen nur noch einen Frame lang. Zudem habe ich einen Status erstellt, der keinerlei Auswirkungen auf einen Charakter hat und am Ende einer jeden Runde automatisch entfernt wird. Ein gegnerischer Angriff verursacht zu 100% diesen Status, zudem auch ein Common Event. Über einen Conditional Branche, welcher sich im Common Event befindet, wird nun abgefragt, welcher Charakter diesen Status hat. Hat beispielsweise Charakter Nummer 2 diesen Status, dieser also angegriffen wurde, so wird nun ein "Screenflash" (oder besser ein Treffer) dadurch simuliert, dass sich das jeweilige Picture verfärbt und wieder normal wird. Zudem erfolgt ein Soundeffekt et cetera (halt wie bei normalen Battle Animations).
Im Script Editor kann ich nichts selber schreiben, dafür kenne ich mich ziemlich gut mit Event Scripting aus.
Aber danke für deine Bemühungen. :)
Powered by vBulletin® Version 4.2.3 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.