Ergebnis 1 bis 4 von 4

Thema: Sounds einer Route nur in Nähe wiedergeben~

  1. #1

    Sounds einer Route nur in Nähe wiedergeben~

    Hayo~

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

  2. #2
    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:

    Code:
    #==============================================================================
    # ** 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

  3. #3
    Zitat Zitat von Mordechaj Beitrag anzeigen
    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?

    Geändert von Stray (11.07.2011 um 19:45 Uhr)

  4. #4
    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.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •