RPGVX.net
RPG-Maker VX => VX Technik [Frageforum] => Thema gestartet von: DimiFW am Dezember 20, 2008, 17:15:23
-
Ich würde in meinem Spiel gerne die Möglichkeit einbauen das man per Tastendruck (nehmen wir mal L) die Musik an und aus stellen kann.
Das man das wahrscheinlich per Common Event einstellt ist mir schon relativ klar. Hab dann ne Bedingung ausgewählt. Falls Taste L gedrückt wird passiert....tja...und jetzt kommt mein Problem...ich finde nix wo ich die Sounds auf 0% Lautstärke stellen kann oder halt komplett ausstellen kann. Kann mir jemand sagen wie ich das hinbekomme?
-
es geht schon mit Comment events
"Fade Out BGM" Problem hierbei ist nur, dass wieder anmachen des Soundes, weil man ja nicht sagen kann, den Sound von MapX spielen mit dem normalen Editor.
Denke mal ist per Script moeglich am besten.
-
ok, danke erst mal...aber das ist ja dann leider wie du schon sagtest nur eine halbe sache. kann mir niemand sagen wie ich das hinbekommen kann?
-
Irgendwo über Main einfügen:
class << Audio
HWND = ::Win32API.new('user32', 'GetActiveWindow', nil, 'I').call.freeze
Initialize = ::Win32API.new('RGSS202E', 'RGSSAudioInitialize', 'I', 'I')
Finalize = ::Win32API.new('RGSS202E', 'RGSSAudioFinalize', nil, 'I')
def on()
Initialize.call(HWND)
end
def off()
Finalize.call
end
end
Mit folgenden Code schaltest du die Musik an: Audio.on
Mit folgenden aus: Audio.off
Ersteres müsstest du auf jeden Fall in Main unter end nochmals einfügen, da der RGSS Player versucht den Audio Context abzuschalten, obwohl er möglicherweise nicht existiert, z.B. durch Audio.off.
Dürfte außerdem auch mit dem RGSS1/RPGXP funktionieren, wenn RGSS202E im Code durch RGSS102E zu ersetzt wird.
-
Irgendwo über Main einfügen:
class << Audio
HWND = ::Win32API.new('user32', 'GetActiveWindow', nil, 'I').call.freeze
Initialize = ::Win32API.new('RGSS202E', 'RGSSAudioInitialize', 'I', 'I')
Finalize = ::Win32API.new('RGSS202E', 'RGSSAudioFinalize', nil, 'I')
def on()
Initialize.call(HWND)
end
def off()
Finalize.call
end
end
Mit folgenden Code schaltest du die Musik an: Audio.on
Mit folgenden aus: Audio.off
Ersteres müsstest du auf jeden Fall in Main unter end nochmals einfügen, da der RGSS Player versucht den Audio Context abzuschalten, obwohl er möglicherweise nicht existiert, z.B. durch Audio.off.
Dürfte außerdem auch mit dem RGSS1/RPGXP funktionieren, wenn RGSS202E im Code durch RGSS102E zu ersetzt wird.
cool danke, lässt sich super per event starten :)
sorry das ich erst so spät antworte, aber jetzt hätte ich noch eine frage dazu. wie bekomm ich es hin das ich im Menü einen Punkt namens "Sound" habe, wo beim draufgehen rechts im Fenster eine Auswahlmöglichkeit angezeigt wird (oder von mir aus auch ein popup/fenster auf geht) ob ich Sound haben will oder nicht und je nachdem was ich auswähle verschwindet der Sound oder startet wieder?
-
Mach doch diese Abfrage im Eventeditor, mit den Möglichkeiten.
Dann stellste ein, wenn man L drückt kommt das Choice Fenster mit den Möglichkeiten
Sound an und Sound aus. Dann halt in jede Choice das Event zu an- bzw. ausschalten des Sounds.
-
sorry fürs hochholen aber irgendwie will das nicht funktionieren. hab es jetzt so:
(http://img442.imageshack.us/img442/5743/unbenannthl.jpg)
Der Switch Intro Ende startet logischerweise wenn das Intro vorbei ist und man selbst die Figur bedienen kann. Allerdings wechselt die Map nachdem der Schalter aktiviert wurde, hat das irgendwelche auswirkungen?
Denn so wie es jetzt ist kann ich so viel L drücken wie ich will, es passiert garnichts.
-
Ich kann dir sagen warum.
Weil der Maker andere Tasten verwendet, ist zwar bescheuert, aber ist halt so.
Drück mal beim spielen F1, und geh auf Keyboard.
Dort schaust du bei welcher Teste "L" dahinter steht.
Diese Taste musst du drücken dann.
In deinem Fall die Taste "V" auf der Tastatur, die im Maker die Taste "L" belegt.
Kapiert?
Wenn nicht ich kanns nochmal genauer erklären.^^
Also starte dein Projekt einfach mal und drück dann "V" anstatt "L".
-
ok, das muss man erst mal wissen...jetzt gings, danke dir ^^
-
alter thread, neues problem
wenn ich den sound durch den tastendruck ausschalte und dann wieder anschalte dauert es einen moment bis die BGM anfängt zu laufen. Bevor sie startet freezed das spiel auch kurz.
liegt das vielleicht hier dran? "call.freeze" ? kann ich das so ändern dass es ohne wartezeit gleich geändert wird?
allgemein scheint das spiel ganz schön zu hängen wenn es sound abspielen muss, z.b. auch nach nem kampfsieg.
Mein Main:
#==============================================================================
# ** Main
#------------------------------------------------------------------------------
# After defining each class, actual processing begins here.
#==============================================================================
begin
Graphics.freeze
$scene = Scene_Title.new
$scene.main while $scene != nil
Graphics.transition(30)
rescue Errno::ENOENT
filename = $!.message.sub("No such file or directory - ", "")
print("Unable to find file #{filename}.")
end
Audio.on
Das Audioscript von oben hab ich auch drinne und starte wie gesagt per tastendruck-event die soundauswahl
-
sorry für den doppelpost, aber kann mir denn keiner helfen? das soundproblem macht mein ganzes spiel kaputt und ich weiß nicht woran es liegt...
edit:
die probleme nochmal ganz genau erklärt:
- schalte ich per tastendruck den sound aus und danach wieder an startet die backgroundmusik erst entweder wieder nach nem kartenwechsel wenn ichs in den eigenschaften der karte einstelle. oder wenn ich die musik als paralleler prozess laufen lasse auf der map dann startet die erst wenn das event im aktuellen kartenausschnitt ist. und in beiden fällen erst nach nem freeze von ca. 10 sekunden.
- genau so freezed das spiel für 10 sekunden wenn ich vorher sound aus und wieder an gemacht habe, wenn ich in nem kampf gewinne und der "siegsound" kommt.
-
Ich kann dir da nicht helfen...die community ist hier ja eher ziemlich ruhig.
Vielleicht erkundigst du dich auch bei anderen Foren mal ? Es gibt ja auch noch aktivere ^^
-
Ganz einfach. Hier das abgeänderte Script:
class << Audio
HWND = ::Win32API.new('user32', 'GetActiveWindow', nil, 'I').call.freeze
Initialize = ::Win32API.new('RGSS202E', 'RGSSAudioInitialize', 'I', 'I')
Finalize = ::Win32API.new('RGSS202E', 'RGSSAudioFinalize', nil, 'I')
def on()
Initialize.call(HWND)
@last_bgm.play
@last_bgs.play
end
def off()
@last_bgm = RPG::BGM::last
@last_bgs = RPG::BGS::last
Finalize.call
end
end
Sollte funktionieren.
-
vielen dank pdm, das löst schon mal das problem mit der hintergrundmusik. ein freeze kommt zwar nach der auswahl von "ja" trotzdem, der ist aber nicht schlimm, da ich da vorher nen text einblenden kann wie "dauert kurz, bitte warten bla bla"...hauptsache die bgm startet gleichzeitig mit dem spiel dann wieder. jetzt besteht aber immer noch das problem dass wenn ich den sound ausstelle und wieder an nach nem kampf der "sieg-sound" erst nach nem kurzen freeze startet. weißt du vielleicht woran das liegen kann?