Der Grund liegt darin das ich die Optionen (Neues Spiel, Spiel laden, Spiel beenden) direkt auf das Titelbild geschrieben habe, es also dem Stil der weiteren Textzeilen auf dem TB angepasst habe. Diese sind jedoch zu weit auseinander als das die Standarteinstellung reichen würde.
Im "Scene Titel" habe ich diese 3 einfach offen gelassen. Windowskin ist auch stark beschränkt.^^
Nun, wenn es doch nicht so einfach ist... gibt es eine Möglichkeit das ganze über Tastendruck zu regeln?
Eine "Scene_Title" Klasse selbst zu erstellen ist eigentlich kein Problem, soetwas kann in ein paar wenigen Minuten erledigt werden. Wenn es ein Titelbildschirm im standart Format ist kann man die Optionsauswahl auch ganz einfach ohne ein Window_Command durchführen.
Wenn du möchtest könnte ich dir gerne einmal ein einfaches Beispiel geben, es ist wirklich keine Arbeit die Länger als ein paar wenige Minuten dauern sollte.
Hier, ein kleines Beispiel.
Es ist nicht besonders kompliziert und bietet daher auch nicht allzu viele Möglichkeiten. Lässt sich allerdings perfekt in jegliche standard XP-Projekte integrieren. Im Moment ist es lediglich eine Art kopie des normalen Titelscreens nur ohne ein Command Window sondern stattdessen ein dynamischer sprite als Cursor.
An diesem Titelbildschirm kann natürlich noch sehr viel gefeilt werden um ihn besser zu machen. Vielleicht schaffst du es selbst nötige Updates vor zu nehmen, falls nicht kannst du immernoch nachfragen.
Verändert werden müsste lediglich die Klasse "Scene_Title" und dazu wird die neue Klasse "Scene_Title" hinzugefügt. Man könnte dies auch ohne zwei Klassen lösen allerdings denke ich ist es so wie es im Moment ist am einfachsten zu bearbeiten und zu konfigurieren.
Schau dir einmal das Beispielprojekt an.
Alles was du erledigen musst um es zu implementieren ist folgendes:
Kopiere den Code im Beispielprojekt aus der Klasse "Scene_Title_Base" und füge ihn in die Klasse "Scene_Title" aus deinem Projekt ein.
Kopiere die Klasse "Scene_Title" aus dem Beispielprojekt und füge sie in dein Projekt ein.
In den ersten Zeilen der Klasse "Scene_Title" kannst du den Pfad für das "Background" und "Pointer" Bitmap eingeben.
Hier ist der Code beider Klassen falls du das Projekt nicht downloaden und testen willst:
Hey, danke für die ausführlichge Beschreibung.
Jedoch hat sich wohl ein Bug eingeschlichen. Habe das Projekt, welches du angehängt hast gedownloaded und getestet, wenn ich jedoch die Pfeil nach oben- oder unten Taste drücke, erscheint folgende Fehlermeldung:
Wäre echt super wenn du das beheben könntest. Scheint ja für dich kein Problem darzustellen...
Ersetze das 2. Scene_Title im Script durch dieses:
class Scene_Title < Scene_Title_Base
BACKGROUND_BITMAP = "Graphics/Pictures/Test-Background.png"
POINTER_BITMAP = "Graphics/Pictures/Test-Pointer.png"
POINTER_X = 224 #Cursor X position
POINTER_Y = 166 #Cursor Y position for first command
POINTER_Y_STEP = 55 #Cursor Y Addition for
OPTIONS = 3 #number of commands
NEW_GAME = 0 #Index number for command: New Game
LOAD_GAME = 1 #Index number for command: Load Game
QUIT_GAME = 2 #Index number for command: Quit Game
MAX_INDEX = OPTIONS - 1 #total number of indices
def main
#visual stuff
@sprite_background = Sprite.new
@sprite_background.bitmap = Bitmap.new(BACKGROUND_BITMAP)
@sprite_background.src_rect = @sprite_background.bitmap.rect
@sprite_pointer = Sprite.new
@sprite_pointer.bitmap = Bitmap.new(POINTER_BITMAP)
@sprite_pointer.src_rect = @sprite_pointer.bitmap.rect
@index = 0
@sprite_pointer.x = POINTER_X
self.update_pointer
#standard "Scene_Title" initialization stuff
super
#end of scene title
@sprite_pointer.bitmap.dispose
@sprite_pointer.dispose
@sprite_background.bitmap.dispose
@sprite_background.dispose
end
def update
if Input.repeat?(Input::UP)
$game_system.se_play($data_system.cursor_se)
@index = @index > 0 ? @index - 1 : MAX_INDEX
@sprite_pointer.y = POINTER_Y + @index * POINTER_Y_STEP
end
if Input.repeat?(Input::DOWN)
$game_system.se_play($data_system.cursor_se)
@index = @index < MAX_INDEX ? @index + 1 : 0
@sprite_pointer.y = POINTER_Y + @index * POINTER_Y_STEP
end
if Input.trigger?(Input::C)
case @index
when NEW_GAME
self.command_new_game
when LOAD_GAME
self.command_continue
when QUIT_GAME
self.command_shutdown
end
end
end
def update_pointer
@sprite_pointer.y = POINTER_Y + @index * POINTER_Y_STEP
end
end
Vielen Dank an Shisu, es schlich sich tatsächlich ein kleiner Fehler hinein. Hauptsache es funktioniert jetzt.
Doch wie gesagt, im Moment ist es nur sehr grundlegend.
Hallo Community,
der Befehl "Event Touch" ist ja bekanntlich nur für den Player von Bedeutung, kommt er mit einem Event welches so eingestellt ist in Berührung, oder kommt das Event mit ihm in Berührung, so passiert etwas. Nun habe ich vor ein kleines AKS zu machen. Die Kondition das man selbst oder der Gegner Schaden erhält ist, das man/er mit einem Event in Berührung kommt (in diesem Fall eine Patrone).
Also, wie ist es Möglich das Events mit anderen Events reagieren?
Map-/Screen-Koordinaten.
Musst du halt dann für die betreffenden Events abfragen und vergleichen. Für eine Kugel dürfte es ja nur von Interesse sein, wenn sie dieselben Koordinaten wie ein Event/der Spieler hat.
Okay, danke für die Info.
Wobei ich sagen muss das betreffendes Projekt jetzt wahrscheinlich ein Teamprojekt wird.
Der Jenige hat schon das Ein oder Andere Interessante KS erstellt und das, wie ich es bevorzuge alles über Events.
Hallo Community:
Dieses Mal ist mein Problem schnell erläutert.
Wie kann man auf einer Map zwei verschiedene Fogs anzeigen lassen?
Falls diese Info wichtig ist: Einer soll sich bewegen, der Andere bewegt sich nicht.
Und nein, ich kann keinen der beiden einfach als Picture anzeigen lassen, da die Map größer als 20x15 ist und der eine Fog eine LE ist.
Du kannst dieses Script direkt über dein "Main" Script einfügen. Damit erhälst du Zugang zu einem weiteren Fog.
Additional_Fog_Standard_Name = ""
Additional_Fog_Standard_Hue = 0
Additional_Fog_Standard_Opacity = 64
Additional_Fog_Standard_Zoom_X = 1.0
Additional_Fog_Standard_Zoom_Y = 1.0
Additional_Fog_Standard_Blend_Type = 0
class Spriteset_Map
attr_accessor :refresh_additional_fog
alias initialize_standard initialize
def initialize
@additional_fog = Plane.new(@viewport1)
@additional_fog.z = 3000
@refresh_additional_fog = true
initialize_standard
end
alias dispose_standard dispose
def dispose
@additional_fog.dispose
self.dispose_standard
end
alias update_standard update
def update
if @refresh_additional_fog
@additional_fog.bitmap = RPG::Cache.fog($game_map.additional_fog_name, $game_map.additional_fog_hue)
@additional_fog.zoom_x = $game_map.additional_fog_zoom_x
@additional_fog.zoom_y = $game_map.additional_fog_zoom_y
@additional_fog.opacity = $game_map.additional_fog_opacity
@additional_fog.blend_type = $game_map.additional_fog_blend_type
@refresh_additional_fog = false
end
update_standard
end
end
class Game_Map
attr_accessor :additional_fog_name
attr_accessor :additional_fog_hue
attr_accessor :additional_fog_zoom_x
attr_accessor :additional_fog_zoom_y
attr_accessor :additional_fog_opacity
attr_accessor :additional_fog_blend_type
alias initialize_standard initialize
def initialize
@additional_fog_name = Additional_Fog_Standard_Name
@additional_fog_hue = Additional_Fog_Standard_Hue
@additional_fog_zoom_x = Additional_Fog_Standard_Zoom_X
@additional_fog_zoom_y = Additional_Fog_Standard_Zoom_Y
@additional_fog_opacity = Additional_Fog_Standard_Opacity
@additional_fog_blend_type = Additional_Fog_Standard_Blend_Type
initialize_standard
end
end
class Scene_Map
def set_additional_fog(name=Additional_Fog_Standard_Name, hue=Additional_Fog_Standard_Hue, opacity=Additional_Fog_Standard_Opacity, zoom_x=Additional_Fog_Standard_Zoom_X, zoom_y=Additional_Fog_Standard_Zoom_Y, blend_type=Additional_Fog_Standard_Blend_Type)
$game_map.additional_fog_name = name
$game_map.additional_fog_hue = hue
$game_map.additional_fog_opacity = opacity
$game_map.additional_fog_zoom_x = zoom_x
$game_map.additional_fog_zoom_y = zoom_y
$game_map.additional_fog_blend_type = blend_type
@spriteset.refresh_additional_fog = true
return true
end
end
Der Fog besitzt eine Standardeinstellung welche für alle Karten automatisch geladen wird. Im Moment ist die Standardeinstellung folgende:
Additional_Fog_Standard_Name = ""
Additional_Fog_Standard_Hue = 0
Additional_Fog_Standard_Opacity = 64
Additional_Fog_Standard_Zoom_X = 1.0
Additional_Fog_Standard_Zoom_Y = 1.0
Additional_Fog_Standard_Blend_Type = 0
Der Name ist der Dateiname deines Fogs innerhalb des "Graphics/Fogs" Ordners. Dateinamenserweiterungen wie zum Beispiel ".png" können, müssen aber nicht geschrieben werden.
Die "Hue" ist die Sättigung deines Fogs, innerhalb der Database also der Schieberegler um die Farbe zu variieren.
Opacity beschreibt die Transparenz des Fogs, eine Opacity von 0 bedeutet komplett durchsichtig, beziehungsweise unsichtbar. Eine Opacity von 255 ist das Maximum.
Dann die Zoomwerte als reele Zahl und der Blend_Type. Der Blend_Type 0 bedeutet, dass kein Blendmodus verwendet wird, 1 ist Addition, 2 Subtraktion.
Wie gesagte, dieser Standard gilt für alle Karten, lässt du den Namen leer, wie in dem Beispiel wird kein zusätzlicher Fog gezeigt.
Innerhalb eines Events kannst du den Fog der Karte ebenfalls ändern. Diese Änderung gilt dann für alle Karten global.
der Befehl lautet:
"$scene.set_additional_fog(name, hue, opacity, zoom_x, zoom_y, blend_type)"
Einfach als custom Script in ein Event schreiben und die entsprechenden Parameter eintragen.
Das Script ist natürlich noch ausbaufähig, es soll eher eine Art Ansatz darstellen.
Ich hoffe du wirst damit klarkommen und es kann dir eine Hilfe sein.
Das Script von KD erlaubt es die normalen Pictures dafür einzusetzen, ich hab einfach den Fog aus der Game_Map mit all seinen Möglichkeiten nocheinmal kopiert.
Es ist wohl einfach eine Frage des Geschmacks, die Arbeit der Umsetzung sollte mehr oder weniger die gleiche sein.
Hey,
kleine Frage, wie kann man beim Titelbild die drei Optionen (Neues Spiel, Laden, Beenden... oder wie auch immer man diese nennt)
nebeneinander, statt untereinander anzeigen lassen?
Hoffe auf Hilfe.
Ich habe den Maker gerade nicht zur Hand weshalb ich dir leider kein Script geben kann, allerdings kann ich dir erklären was zu tun sein sollte und vielleicht wirst du selbst in der Lage sein das Problem zu lösen.
Die Befehle auf dem Titelscreen sind in einem Command_Window (die Klasse heist im Maker "Window_Command") Gespeichert.
Das Command Window regelt die Positionen der einzelnen Buttons.
Das Command_Window im Maker erlaubt normalerweise keine horizontale Anordnung, die Befehle in diesem Window sind demnach immer übereinander angeordnet und es gibt keine einfache Möglichkeit sie nebeneinander anzuordnen.
Um sie also nebeneinander anordnen zu können müsstest du die Klasse umschreiben (ich empfehle dir eine Kopie der Klasse anzulegen und diese Kopie zu bearbeiten).
Von diesem Punkt aus weiter kann ich dir gerade im Moment leider nicht helfen da ich das Script nicht zur Hand habe. Falls du nicht selbst in der Lage bist das Script umzuschreiben könntest du es vielleicht auch hier hochstellen sofern sich niemand anderes zur Hilfe anbietet.
Hier findest du eine Klasse Window_Command_Horizontal. Die müsste genau das machen was du brauchst. Einfach im Titelmenü Window_Command durch Window_Command_Horizontal ersetzen und die Breitenangabe in der Parameterliste weglassen (also Window_Command_Horizontal.new(commands) reicht aus).