PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Sounds einer Route nur in Nähe wiedergeben~



Stray
10.07.2011, 23:52
Hayo~

Gibt es ein Script, welches Soundeffekte einer Route, also von einem bestimmten Charakter bzw. Event erst wiedergibt, wenn dieser/s im Bild ist?

Mordechaj
11.07.2011, 00:16
Soll der Sound sofort auf konstanter Lautstärke hörbar sein, oder langsam lauter werden, je näher man kommt?

In ersterem Fall kann dir Folgendes nur bedingt helfen (man kann das sicher noch entsprechend umschreiben, aber dafür bin ich nicht wirklich kompetent), in zweiterem wird es dein Problem lösen:


#==============================================================================
# ** Sound Effekt Script
#------------------------------------------------------------------------------
#
# # Leif / f0tz!baerchen
# v1.0
# 20.02.2011
#
#-------------------------------------------------------------------------------
#
# Was tut dieses Script?
# Dieses Script ermöglichst es, verschiedene Soundquellen (z.B. Feuer, Tiere)
# auf der Map zu platzieren. Diese Quellen geben Geräusche von sich, sobald sich
# der Spieler in ihrer Nähe befindet. Je näher er an der Quelle ist, desto
# lauter der Sound.
#
#-------------------------------------------------------------------------------
#
# Wie kann ich eine neue Soundquelle erstellen?
# Grundsätzlich gibt es zwei Arten von Quellen: SE Soundquellen für kurze,
# wiederkehrende Geräusche und BGS Soundquellen, für konstante Geräusche.
# SE können gleichzeitig abgespielt werden, von den BGS wird immer der
# Lauteste abgespielt. Beide werden erstellt, indem man ein Event auf der Karte
# an entsprechender Stelle platziert, welches oben einen Kommentar enthält,
# der folgendermaßen aussieht:
#
# BGS:Sound,Entfernung,Volume,Pitch
# oder
# SE:Sound,Entfernung,Volume,Pitch,Frames
#
# *Sound: der Name der Sounddatei (ohne Endung)
# *Entfernung: die maximale Entfernung in Tiles, aus der das Geräusch noch
# *hörbar ist
# *Volume, Pitch: max. Volume und Pitch des Geräuschs
# *Frames: Anzahl Frames, nachdem das Geräusch wiederholt wird (nur für SE)
#
#==============================================================================

#==============================================================================
# class for sounds
#==============================================================================
class Game_Sound
attr_reader :current_volume
attr_reader :type
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize(type, event, name, distance, volume, pitch, count=10)
@type = type
@event = event
@name = name
@distance = distance
@count = count
@volume = volume
@current_volume = volume
@pitch = pitch
@last_count = 0
end
#--------------------------------------------------------------------------
# * Object update
#--------------------------------------------------------------------------
def update
add = @type == 'BGS' ? 0 : @event.id * @count / 5
#return false if Graphics.frame_count - @last_count <= @count
return false if (Graphics.frame_count + add) % @count != 0
p_x = $game_player.x
p_y = $game_player.y
dist = Math.sqrt((@event.x - p_x) ** 2 + (@event.y - p_y) ** 2)
@current_volume = [@volume - dist * @volume / @distance, 0].max.round
@last_count = Graphics.frame_count if @current_volume > 0 or @type == 'BGS'
return true
end
#--------------------------------------------------------------------------
# returns audio file
#--------------------------------------------------------------------------
def audio
return RPG::AudioFile.new(@name, @current_volume, @pitch)
end
end

#==============================================================================
# ** Game_Event
#------------------------------------------------------------------------------
# This class deals with events. It handles functions including event page
# switching via condition determinants, and running parallel process events.
# It's used within the Game_Map class.
#==============================================================================
class Game_Event < Game_Character
attr_reader :event
end

#==============================================================================
# ** Game_Map
#------------------------------------------------------------------------------
# This class handles the map. It includes scrolling and passable determining
# functions. Refer to "$game_map" for the instance of this class.
#==============================================================================
class Game_Map
#--------------------------------------------------------------------------
# * Setup
# map_id : map ID
#--------------------------------------------------------------------------
if !method_defined?(:sound_script_game_map_setup)
alias sound_script_game_map_setup setup
end
def setup(map_id)
sound_script_game_map_setup(map_id)
# sounds settings
@sounds = []
for event in @events.values
i = 0
while event.event.pages[0].list[i].code == 108 or
event.event.pages[0].list[i].code == 408
list = event.event.pages[0].list[i]
if list.parameters[0][0..2] == 'SE:'
param = list.parameters[0].downcase.split(':')[1].split(',')
sound = Game_Sound.new('SE', event, param[0], param[1].to_i,
param[2].to_i, param[3].to_i, param[4].to_i)
@sounds.push(sound)
break
elsif list.parameters[0][0..3] == 'BGS:'
param = list.parameters[0].downcase.split(':')[1].split(',')
sound = Game_Sound.new('BGS', event, param[0], param[1].to_i,
param[2].to_i, param[3].to_i)
@sounds.push(sound)
break
end
i += 1
end
end
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
if !method_defined?(:sound_script_game_map_update)
alias sound_script_game_map_update update
end
def update
# updates sounds
self.sound_update
sound_script_game_map_update
end
#--------------------------------------------------------------------------
# updates sounds effects
#--------------------------------------------------------------------------
def sound_update
list = []
@sounds.each do |sound|
next if !sound.update
if sound.type == 'SE'
next if sound.current_volume == 0
$game_system.se_play(sound.audio)
next
end
next if list.size > 0 and sound.current_volume <= list.last.current_volume
list.push(sound)
end
if list.size > 0
$game_system.bgs_play(list.last.audio)
end
end
end

Stray
11.07.2011, 19:42
Soll der Sound sofort auf konstanter Lautstärke hörbar sein, oder langsam lauter werden, je näher man kommt?
In ersterem Fall kann dir Folgendes nur bedingt helfen (man kann das sicher noch entsprechend umschreiben, aber dafür bin ich nicht wirklich kompetent), in zweiterem wird es dein Problem lösen:


Also, danke erst mal.
Da ich mir noch unsicher bin, was mir besser gefallen würde wäre es bestimmt großartig beide Scripts mal vor Augen zu haben. Aber natürlich nur, wenn das geht.

Darf ich nebenbei fragen, woher du die Scripts bekommst?

Mordechaj
11.07.2011, 19:47
Auf RPG-Studio.de gibt es eine sehr beachtliche Sammlung.

http://www.rpg-studio.de/script/search

Achtung, viele sind nicht miteinander kompatibel und einige scheinen überhaupt nicht (mehr?) zu funktionieren. Oder ich bin zu dämlich, das ist auch sehr wahrscheinlich.