Ergebnis 1 bis 19 von 19

Thema: Attacker / Target Animation gleichzeitig anzeigen?

  1. #1

    Attacker / Target Animation gleichzeitig anzeigen?

    Ich wollte fragen ob irgendwer ein Skript oder eine sonstige Möglichkeit wüsste, die Attacker und Target Animation
    GLEICHZEITIG anstatt wie bislang nacheinander anzeigen zu lassen, oder mir da was kleines 'für schreiben könnte.

    Grund: Ich will, dass mein Battler, der bei mir durch sein Charset dargestellt wird, während des Angriffes "unsichtbar" ist, damit er nicht plötzlich
    zweimal auftaucht.

  2. #2
    Das geht halbwegs einfach, kann man sicherlich ein Skript zu bauen - Problem ist allerdings, dass jeder Sprite nur eine Animation gleichzeitig laufen haben kann. Wenn du also eine Animation mit Ziel u.a. dem Attacker machst, würde auf diesem nur die letzte Animation angezeigt werden. Ich weiss nicht genau ob das Funktionieren würde, RPG::Sprite so umzubauen dass dieses 2 Animationen gleichzeitig abspielt (gehen würde das, aber ob das auch funktioniert im Endeffekt, müsste jemand mit mehr Einblick in die Feinheiten vom RGSS sagen), ist aber ein wenig aufweniger.

    Andere Sache: Wieso willst du die Animation gleichzeitig anzeigen, wenn dein Attacker dabei unsichtbar sein soll? Dieser bräuchte dann doch eigentlich gar keine Animation, sondern nur ne Sichtbarkeits-Änderung.

  3. #3
    Zitat Zitat von Todu Beitrag anzeigen
    [...]

    Andere Sache: Wieso willst du die Animation gleichzeitig anzeigen, wenn dein Attacker dabei unsichtbar sein soll? Dieser bräuchte dann doch eigentlich gar keine Animation, sondern nur ne Sichtbarkeits-Änderung.
    Also im Moment hatte ich das so geplant:
    Ich nutze ein Skript, welches statt den Battlern die Charsets anzeigt, welche aber noch wie Battler ansteuerbar sind.
    Wenn mein Held nun eines der Monster angreift, zieht er (in der Animation) seine Pistole und feuert drauf los.

    Problem: Der Held wäre dann zwei mal zu sehen, während des Angriffes (Ein mal in der Ani, einmal als Battler)

    Bislang angedachte Lösung: Ich weise der benutzen Waffe Pistole#1 unter "Target Animation" die Animation zu, in der der Held die Waffe zieht, feuert, und der Schuss einschlägt;
    unter "Attacker" Animation eine Ani die den Battler für die selbe Anzahl Frames unsichtbar macht.

    Problem hierbei: Der Maker spielt die "Target Animation" erst ab, wenn die "Attacker Animation" vollendet ist, d.h. der Held verschwindet kurz, taucht wieder auf, ist
    beim eigentlichen Angriff dann aber doch zwei mal da. :-/

  4. #4
    Also, ich sehe beide Optionen als brauchbar, finde aber persönlich letztere Option nicht nur einfacher Umzusetzen, sondern auch hübscher. Ich kann dir gleich in der Bahn das mal eben Scripten, ich geh mal davon aus dass das mit deinem anderen Script kompatibel ist, und gegen ~16 Uhr posten, kannst mir ja sagen, ob das dann deinen Vorstellungen entspricht. Ansonsten hat vllt auch jemand anders ne bessere oder schnellere Lösung - oder ich versteh dein Problem einfach falsch. Ich glaube allerdings, so wie du es beschreibst, weiss ich nicht ob gleichzeitig Anzeigen lassen das ist was das Problem löst ~.~

  5. #5
    Das wäre lieb, danke sehr.

    Ich hab jetzt nämlich eine Lösung gefunden, die aber auch nur bei diesem einen Char funktioniert, weil dieser Fernkämpfer ist,
    bei Nahkämpfern (die zwangsläufig in die Target Animation müssen, damit sie nah genug an das Ziel herankommen) aber versagt,
    oder unschön wirkt.

    Provisorium:
    [Ich pack das ziehen der Pistole einfach in die "Attacker Animation", und nur Schuss-Flugbahn, und Einschlag in die
    "Target Animation". Hat zwar den Nachteil, dass mein Char nicht mehr "direkt" vor das Monster springt, und daher
    - wenn es weit weg vom Char steht- , die Flugbahn der Kugel seltsam wirkt, und dass der Char zwangsläufig, (Weil die
    Attacker Ani beendet ist) die Waffe bereits "wegsteckt", bevor der Schuss einschlägt, aber im Moment ist es besser als den
    Char zweimal zu haben. ]

  6. #6
    Ah, stimmt, ich vergaß Nahkämpfer. Ich hab nicht mehr groß Zeit zu posten, ich bin die letzten 2 Stunden auch immer nur kurz am Rechner gewesen, sonst hätt ich gleich mitm Skripten angefangen, ich überleg mir ne Lösung. Vllt schaffts du es ja in den 10 Minuten zu posten ehe ich los bin: kommt in dem Fall vor, dass z.b. bei Items oder Heilung, ein "Attacker" auf sich selbst ne Animation wirkt?

  7. #7
    Ja, das kommt in meinem Spiel ab und an vor.

  8. #8
    Ist kein Problem, dafür hab ich gesorgt. Ich hab hier jetzt was, was doppelte Animationen untersützt und gleichzeitige Animationen + ausblendung supported.

    Muss da wohl noch nen Bug raus fixen, sieht aber schon ganz funktionierend aus.

    Problem: vor morgen kann ich dir das nicht hier rein schreiben - hier an der Uni gibts ein kleines Problem mit dem Internet, einige Rechner kommen nicht online, darunter meiner. Daher kann ich nur das hier grad posten, du wirst dich bis morgen gedulden müssen, da ich über Nacht bei Freunden bin die grade den Anbieter wechseln und daher auch kein Internet haben. Dafür sollte ich den Bug bis morgen gefixt haben, irgendwie hab ich irgendwo wohl ne Endlosschleife reingehauen, StackLevelTooDeep klingt stark danach.

    Sorry für die Verzögerung :/

  9. #9
    So, nachdem das nun doch mehr Arbeit war als geplant - aber durch meine Internetabstinenz und vielen Bahnfahrten hatte ich viel Zeit das zu erledigen - hab ich dein Script nun fertig. Waren doch 2 von mir dumm verursachte Endlosschleifen -.-
    Es macht: Charaktere während einer Animation (ausser white flash) unsichtbar, spielt animation auf dem Battler und dem Target gleichzeitig ab.
    Du solltest diesen Teil

    Code:
      #----------------------------------------------------#
      #-------------------RPG::Sprite----------------------#
      #----------------------------------------------------# 
    
    #RPG-Sprite# #Updated to support two animations at once,
                 #callable via using RPG::SPrite.animation while an 
                 #Animation is still running.
                 #Using it again while 2 Animations are running will stop animation1
                 #an replace it.
    class RPG::Sprite
      
      @@_animations2 =[]
      @@_reference_count2={}
      
      
          def update
          super
          if @_whiten_duration > 0
            @_whiten_duration -= 1
            self.color.alpha = 128 - (16 - @_whiten_duration) * 10
          end
          if @_appear_duration > 0
            @_appear_duration -= 1
            self.opacity = (16 - @_appear_duration) * 16
          end
          if @_escape_duration > 0
            @_escape_duration -= 1
            self.opacity = 256 - (32 - @_escape_duration) * 10
          end
          if @_collapse_duration > 0
            @_collapse_duration -= 1
            self.opacity = 256 - (48 - @_collapse_duration) * 6
          end
          if @_damage_duration > 0
            @_damage_duration -= 1
            case @_damage_duration
            when 38..39
              @_damage_sprite.y -= 4
            when 36..37
              @_damage_sprite.y -= 2
            when 34..35
              @_damage_sprite.y += 2
            when 28..33
              @_damage_sprite.y += 4
            end
            @_damage_sprite.opacity = 256 - (12 - @_damage_duration) * 32
            if @_damage_duration == 0
              dispose_damage
            end
          end
          if @_animation != nil and (Graphics.frame_count % 2 == 0)
            @_animation_duration -= 1
            update_animation
          end
          if @_animation2 != nil and (Graphics.frame_count % 2 == 0)
            @_animation2_duration -= 1
            update_animation2
          end      
          if @_loop_animation != nil and (Graphics.frame_count % 2 == 0)
            update_loop_animation
            @_loop_animation_index += 1
            @_loop_animation_index %= @_loop_animation.frame_max
          end
          if @_blink
            @_blink_count = (@_blink_count + 1) % 32
            if @_blink_count < 16
              alpha = (16 - @_blink_count) * 6
            else
              alpha = (@_blink_count - 16) * 6
            end
            self.color.set(255, 255, 255, alpha)
          end
          @@_animations.clear
          @@_animations2.clear
        end
    
        
      #alias double_animation_update update
      #def update
      #  if @_animation2 != nil and (Graphics.frame_count % 2 == 0)
      #      @_animation2_duration -= 1
      #      update_animation2
      #  end
      #  double_animation_update 
      #  @@_animations2.clear
      #end  
      
      alias double_animation_init initialize
      def initialize (vp=nil)
        double_animation_init(vp)
        @_animation2_duration = 0
      end
      
      alias double_animation_dispose dispose
      def dispose
        double_animation_dispose
        dispose_animation2
      end
      
      def animation(animation,hit)
        if @_animation_duration > 0
          if @_animation2_duration > 0
            dispose_animation
          else
            animation2(animation,hit)
            return
          end
        end
          @_animation = animation
          return if @_animation == nil
          @_animation_hit = hit
          @_animation_duration = @_animation.frame_max
          animation_name = @_animation.animation_name
          animation_hue = @_animation.animation_hue
          bitmap = RPG::Cache.animation(animation_name, animation_hue)
          if @@_reference_count.include?(bitmap)
            @@_reference_count[bitmap] += 1
          else
            @@_reference_count[bitmap] = 1
          end
          @_animation_sprites = []
          if @_animation.position != 3 or not @@_animations.include?(animation)
            for i in 0..15
              sprite = ::Sprite.new(self.viewport)
              sprite.bitmap = bitmap
              sprite.visible = false
              @_animation_sprites.push(sprite)
            end
            unless @@_animations.include?(animation)
              @@_animations.push(animation)
            end
          end
          update_animation
      end
    
      
      
      def animation2 (animation, hit)
        dispose_animation2
        @_animation2 = animation
        return if @_animation == nil
        @_animation2_hit = hit
        @_animation2_duration = @_animation2.frame_max
        animation_name = @_animation2.animation_name
        animation_hue = @_animation2.animation_hue
        bitmap = RPG::Cache.animation(animation_name, animation_hue)
        if @@_reference_count2.include?(bitmap)
          @@_reference_count2[bitmap] += 1
        else
          @@_reference_count2[bitmap] = 1
        end
        @_animation2_sprites = []
        if @_animation2.position != 3 or not @@_animations2.include?(animation)
          for i in 0..15
            sprite = ::Sprite.new(self.viewport)
            sprite.bitmap = bitmap
            sprite.visible = false
            @_animation2_sprites.push(sprite)
          end
          unless @@_animations2.include?(animation)
            @@_animations2.push(animation)
          end
        end
        update_animation2
      end
      
       def dispose_animation2
          if @_animation2_sprites != nil
            sprite = @_animation2_sprites[0]
            if sprite != nil
              @@_reference_count2[sprite.bitmap] -= 1
              if @@_reference_count2[sprite.bitmap] == 0
                sprite.bitmap.dispose
              end
            end
            for sprite in @_animation2_sprites
              sprite.dispose
            end
            @_animation2_sprites = nil
            @_animation2   = nil
          end
        end
    
      alias double_animation_effect effect?
        def effect?
          double_animation_effect or
          @_animation2_duration > 0
        end
    
        def update_animation2
          if @_animation2_duration > 0
            frame_index = @_animation2.frame_max - @_animation2_duration
            cell_data = @_animation2.frames[frame_index].cell_data
            position = @_animation2.position
            animation_set_sprites(@_animation2_sprites, cell_data, position)
            for timing in @_animation2.timings
              if timing.frame == frame_index
                animation2_process_timing(timing, @_animation2_hit)
              end
            end
          else
            dispose_animation2
          end
        end
        
       def animation_set_sprites(sprites, cell_data, position)
          for i in 0..15
            sprite = sprites[i]
            pattern = cell_data[i, 0]
            if sprite == nil or pattern == nil or pattern == -1
              sprite.visible = false if sprite != nil
              next
            end
            sprite.visible = true
            sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
            if position == 3
              if self.viewport != nil
                sprite.x = self.viewport.rect.width / 2
                sprite.y = self.viewport.rect.height - 160
              else
                sprite.x = 320
                sprite.y = 240
              end
            else
              sprite.x = self.x - self.ox + self.src_rect.width / 2
              sprite.y = self.y - self.oy + self.src_rect.height / 2
              sprite.y -= self.src_rect.height / 4 if position == 0
              sprite.y += self.src_rect.height / 4 if position == 2
            end
            sprite.x += cell_data[i, 1]
            sprite.y += cell_data[i, 2]
            sprite.z = 2000
            sprite.ox = 96
            sprite.oy = 96
            sprite.zoom_x = cell_data[i, 3] / 100.0
            sprite.zoom_y = cell_data[i, 3] / 100.0
            sprite.angle = cell_data[i, 4]
            sprite.mirror = (cell_data[i, 5] == 1)
            if self.opacity == 0
              sprite.opacity = cell_data[i, 6] * 255.0
            else
              sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
            end
            sprite.blend_type = cell_data[i, 7]
          end
        end
        
        def animation2_process_timing(timing, hit)
          if (timing.condition == 0) or
             (timing.condition == 1 and hit == true) or
             (timing.condition == 2 and hit == false)
            if timing.se.name != ""
              se = timing.se
              Audio.se_play("Audio/SE/" + se.name, se.volume, se.pitch)
            end
            case timing.flash_scope
            when 1
              self.flash(timing.flash_color, timing.flash_duration * 2)
            when 2
              if self.viewport != nil
                self.viewport.flash(timing.flash_color, timing.flash_duration * 2)
              end
            when 3
              self.flash(nil, timing.flash_duration * 2)
            end
          end
        end
        
        alias double_animation_x x=
        def x=(x)
          sx = x - self.x      
          if @_animation2_sprites != nil
            for i in 0..15
              @_animation2_sprites[i].x += sx
            end
          end          
          double_animation_x(x)
        end
        
        alias double_animation_y y=
        def y=(y)
          sy = y - self.y      
          if @_animation2_sprites != nil
            for i in 0..15
              @_animation2_sprites[i].y += sy
            end
          end          
          double_animation_y(y)
        end    
      
      end
    vor allem anderen einfügen, folgenden

    Code:
    #----------------------------------------------------#
      #-----------------Game_Battler-----------------------#
      #----------------------------------------------------#  
     class Game_Battler
      
      attr_accessor :opacity0
      attr_accessor :opacity255
      attr_accessor :animation_hit2
      attr_accessor :animation_id2
      
      alias double_animation_init_gb initialize
      def initialize
        double_animation_init_gb
        @opacity0=false
        @opacity255=false
        @animation_hit2 = false
        @animation_id2=0
        @last_done=1
      end
      
      def animation_id=(id)
        if @animation_id ==0
          @animation_id=id
          @last_done=1
          return
        elsif @animation_id2 == 0
          @animation_id2=id
          @last_done=2
          return
        end
        @animation_id = id
        @last_done=1
      end
    
      def animation_hit=(hit)
        if @last_done==1
          @animation_hit=hit
          return
        else
          @animation_hit2=hit
          return
        end
      end
      
      def FIXanimation_id=(id)
        @animation_id=id
      end
    end
    
    
      #----------------------------------------------------#
      #-----------------Sprite_Battler---------------------#
      #----------------------------------------------------#
    
    class Sprite_Battler
      alias double_animation_upd update
      def update
        #Animation
        if @battler.animation_id != 0
          animation = $data_animations[@battler.animation_id]
          animation(animation, @battler.animation_hit)
          @battler.FIXanimation_id = 0
        end
        double_animation_upd
          # Animation2
          if @battler.animation_id2 != 0
            animation = $data_animations[@battler.animation_id2]
            animation(animation, @battler.animation_hit2)
            @battler.animation_id2 = 0
          end
          if @battler.opacity0
            self.opacity = 0
            #@battler.opacity0=false
          end
          if @battler.opacity255
            self.opacity = 255
            @battler.opacity0=false
            @battler.opacity255=false
          end
      end
    end 
    
      #----------------------------------------------------#
      #-----------------Scene_Battle-----------------------#
      #----------------------------------------------------#
    
      class Scene_Battle
    
      alias double_animation_up4s2 update_phase4_step2
      def update_phase4_step2
        double_animation_up4s2
        if @phase4_step == 3
          @phase4_step = 4
        end
      end
    
      alias double_animation_up4s3 update_phase4_step3
      alias double_animation_up4s4 update_phase4_step4
      def update_phase4_step4
        unless @animation1_id == 0
          @active_battler.opacity0=true
        end
        double_animation_up4s3
        double_animation_up4s4
      end
      
      alias double_animation_up4s5 update_phase4_step5
      def update_phase4_step5
        @active_battler.opacity255=true
        double_animation_up4s5
      end
    end
    am besten unter deinen anderen System - wobei es vermutlich egal ist.

    Das Script funktioniert in meinem Testprojekt einwandfrei, allerdings ist es nicht ideal geschrieben, also es könnte durchaus Kompatibilitätsprobleme mit anderen Scripten geben, da kann ich für nichts garantieren.

    Wenn du Probleme mit dem Script hast, u.a. eben wegen Kompatibilität, post einfach nochmal hier oder schreib ne PN

    @KD:
    Ich bin übrigens gerne für Verbesserungsvorschläge offen, wenn du sie geben möchtest. Grade bei RPG::Sprite weiss ich nicht, ob ich mir einige der Variablen (u.a. reference_count) hätte sparen können zu verdoppeln.

    Geändert von Todu (15.11.2011 um 17:28 Uhr)

  10. #10
    Im Moment bin ich mir trotz Erklärung relativ unsicher, wo ich die einzelnen Skript-Bestandteile jeweils einfügen soll.
    Egal wo ich sie einfüge bekomme ich bislang immer ne Fehlermeldung, weswegen ich mal vermute, dass ich sie
    nicht an rechter Stelle einfüge ... :-(

    Z.B.

    Je nach dem wo ich es einfüge Variiert der Inhalt der Fehlermeldung freilich ...

    Geändert von Jerome Denis Andre (16.11.2011 um 02:50 Uhr)

  11. #11
    Warum nicht bei der "Attacker-Animation" den Battler lossprinten lassen und halt die ganze Laufzeit der Attacker- und Targetanimation den Befehl "Hide Target" bei einer Battle Animation nutzen? Kannst du da, wo du festlegen kannst, bei welchem Frame welche SE's starten, das Ziel aufblinkt etc., als Befehl für Frame 1 der Attacker-Animation bestimmen. Wenn der Battler halt nicht lossprintet, reicht der Befehl auch am Ende der Battle Animation (da musst du dann aber die Frameanzahl der Attacker-Animation wieder abziehen).
    Da braucht man also kein extra Script dafür...

    MfG Sorata

  12. #12
    Zitat Zitat von sorata08 Beitrag anzeigen
    Warum nicht bei der "Attacker-Animation" den Battler lossprinten lassen und halt die ganze Laufzeit der Attacker- und Targetanimation den Befehl "Hide Target" bei einer Battle Animation nutzen? Kannst du da, wo du festlegen kannst, bei welchem Frame welche SE's starten, das Ziel aufblinkt etc., als Befehl für Frame 1 der Attacker-Animation bestimmen. Wenn der Battler halt nicht lossprintet, reicht der Befehl auch am Ende der Battle Animation (da musst du dann aber die Frameanzahl der Attacker-Animation wieder abziehen).
    Da braucht man also kein extra Script dafür...

    MfG Sorata
    Also, indem ich unter der "Attacker Animation" meiner Waffe eine BA einstelle, die dazu führt, dass
    der Battler z.B. 26 Frames lang versteckt ist, und derweil in der BA der "Target Animation" zu sehen
    ist, in etwa so:





    Meintest du das so ?

    Falls ja:

    Wie oben beschrieben führt der Maker die "Attacker Animation" scheinbar (zumindest bei mir) KOMPLETT aus, bevor die "Target Animation" überhaupt begonnen wird.
    D.H. in beschriebenen Fall würde der Battler dank der Attacker BA erst für 26 Frames verschwinden, dann wieder auftauchen (bevor de Target BA beginnt) und erst nachdem
    er wieder als Battler erschien, in der Target BA zu sehen sein, sodass er nun "zwei mal" da ist.

  13. #13
    Hngaaa, guten morgen, ich werd mir das gleich mal ansehn. Aber evtl hab ich einen entscheidenden Fehler gemacht: Welchen Maker nutzt du eigentlich?

  14. #14
    XP
    (Auch wenn es nun nicht funktioniert übrigens vielen Dank für den Aufwand den du dir machst ^^)

    EDIT: Für den Fall, dass es auch daran liegen könnte hier das Sideview Skript, welches ich direkt über Main nutze:
    Code:
    #==============================================================================
    #++?????????(?????????)ver. 1.14++
    #Script by ???
    #http://rpg.para.s3p.net/
    #------------------------------------------------------------------------------
    # ????????????????????????
    #==============================================================================
    
    module SDVA
    
    X_LINE = 500 # ????????????
    Y_LINE = 200 # ????????????
    X_SPACE = 15 # ?????????????
    Y_SPACE = 40 # ?????????????
    X_POSITION = 25 # ??[????????]????
    Y_POSITION = 0 # ??[????????]????
    
    ATTACK_MOVE = true # ???????????( true / false )
    SKILL_MOVE = true # ??????????????( true / false )
    ITEM_MOVE = false # ???????????????( true / false )
    MOVE_STEP = 1 # ????
    MOVE_PIXEL = 10 # ???????????
    
    PARTY_POS = 1 # ?????????( 0:? / 1:? / 2:? / 3:? )
    
    WINDOWPOS_CHANGE = true # ??????????????????????( true / false )
    
    end
    
    #==============================================================================
    # ? Game_Actor
    #==============================================================================
    
    class Game_Actor < Game_Battler
    #--------------------------------------------------------------------------
    # ? ????? X ?????
    #--------------------------------------------------------------------------
    def screen_x
    if self.index != nil
    # ?????
    pos = $data_classes[self.class_id].position
    x_pos = pos * SDVA::X_POSITION
    scr_x = self.index * SDVA::X_SPACE + SDVA::X_LINE + x_pos
    # ??????????
    if self.current_action.move_action == true
    # ????
    scr_x += @shift_x
    end
    return scr_x
    else
    return 0
    end
    end
    #--------------------------------------------------------------------------
    # ? ????? Y ?????
    #--------------------------------------------------------------------------
    def screen_y
    if self.index != nil
    # ?????
    pos = $data_classes[self.class_id].position
    y_pos = pos * SDVA::Y_POSITION
    scr_y = self.index * SDVA::Y_SPACE + SDVA::Y_LINE + y_pos
    # ??????????
    if self.current_action.move_action == true
    # ????
    scr_y += @shift_y
    end
    return scr_y
    else
    return 0
    end
    end
    #--------------------------------------------------------------------------
    # ? ????? Z ?????
    #--------------------------------------------------------------------------
    def screen_z
    if self.index != nil
    return self.index
    else
    return 0
    end
    end
    end
    
    #==============================================================================
    # ? Game_Battler (???? 1)
    #==============================================================================
    
    class Game_Battler
    #--------------------------------------------------------------------------
    # ? ??????????
    #--------------------------------------------------------------------------
    attr_reader :pattern # ??????
    attr_reader :trans_x # X???????
    attr_reader :moving # ??????
    #--------------------------------------------------------------------------
    # ? ?????????
    #--------------------------------------------------------------------------
    alias initialize_sdva initialize
    def initialize
    initialize_sdva
    move_reset
    end
    #--------------------------------------------------------------------------
    # ? ??????
    #--------------------------------------------------------------------------
    def move
    @moving = 1
    if @step < SDVA::MOVE_STEP
    # ??????????
    @pattern = (@pattern + 1) % 4
    @step += 1
    move_step
    else
    # ????
    @pattern = 1
    @moving = 2
    end
    end
    #--------------------------------------------------------------------------
    # ? ????
    #--------------------------------------------------------------------------
    def move_step
    # ???????????????????
    case SDVA::PARTY_POS
    when 0
    @shift_y = @step * SDVA::MOVE_PIXEL
    when 1
    @shift_x = -(@step * SDVA::MOVE_PIXEL)
    when 2
    @shift_x = @step * SDVA::MOVE_PIXEL
    when 3
    @shift_y = -(@step * SDVA::MOVE_PIXEL)
    end
    end
    #--------------------------------------------------------------------------
    # ? ???????
    #--------------------------------------------------------------------------
    def move_reset
    @moving = 0
    @pattern = 0
    @step = 0
    @shift_x = 0
    @shift_y = 0
    end
    end
    
    #==============================================================================
    # ? Game_BattleAction
    #==============================================================================
    
    class Game_BattleAction
    #--------------------------------------------------------------------------
    # ? ??????????
    #--------------------------------------------------------------------------
    attr_accessor :move_action # ??????????
    #--------------------------------------------------------------------------
    # ? ???
    #--------------------------------------------------------------------------
    alias clear_sdva clear
    def clear
    clear_sdva
    @move_action = false
    end
    end
    
    #==============================================================================
    # ? Sprite_Battler
    #==============================================================================
    
    class Sprite_Battler < RPG::Sprite
    #--------------------------------------------------------------------------
    # ? ??????
    #--------------------------------------------------------------------------
    alias update_sdva update
    def update
    # ????????????????
    if @battler.is_a?(Game_Actor)
    # ????????????????????
    # ??????
    if @battler.battler_name != @battler_name or
    @battler.battler_hue != @battler_hue or
    @battler.current_action.basic == 0 or
    @battler.current_action.kind != 3
    # ????????????
    @character_name = @battler.character_name
    @character_hue = @battler.character_hue
    # ???????????
    self.bitmap = RPG::Cache.character(@character_name, @character_hue)
    cw = self.bitmap.width / 4
    ch = self.bitmap.height / 4
    @width = cw
    @height = ch
    if @battler.current_action.move_action == true
    # ????
    @battler.move
    else
    @battler.move_reset
    end
    # ?????????
    sx = @battler.pattern * cw
    sy = SDVA::PARTY_POS * ch
    self.src_rect.set(sx, sy, cw, ch)
    self.ox = @width / 2
    self.oy = @height
    # ??????????? 0 ???
    if @battler.hidden
    self.opacity = 0
    end
    end
    end
    update_sdva
    end
    end
    
    #==============================================================================
    # ? Scene_Battle
    #==============================================================================
    
    class Scene_Battle
    #--------------------------------------------------------------------------
    # ? ????????????????????
    #--------------------------------------------------------------------------
    alias phase3_setup_command_window_sdva phase3_setup_command_window
    def phase3_setup_command_window
    phase3_setup_command_window_sdva
    if SDVA::WINDOWPOS_CHANGE
    # ???????????????????
    case SDVA::PARTY_POS
    when 0
    x_pos = @active_battler.screen_x - (@actor_command_window.width/2)
    y_pos = @active_battler.screen_y
    when 1
    x_pos = @active_battler.screen_x - @actor_command_window.width - 16
    y_pos = @active_battler.screen_y - @actor_command_window.height
    when 2
    x_pos = @active_battler.screen_x + 16
    y_pos = @active_battler.screen_y - @actor_command_window.height
    when 3
    x_pos = @active_battler.screen_x - (@actor_command_window.width/2)
    y_pos = @active_battler.screen_y - @actor_command_window.height - 48
    end
    @actor_command_window.x = x_pos >= 0 ? x_pos : 0
    @actor_command_window.x = x_pos+@actor_command_window.width <= 640 ? x_pos : 640-@actor_command_window.width
    @actor_command_window.y = y_pos >= 0 ? y_pos : 0
    @actor_command_window.y = y_pos+@actor_command_window.height <= 480 ? y_pos : 480-@actor_command_window.height
    # ??????????????????
    @actor_command_window.z = 9999
    end
    end
    #--------------------------------------------------------------------------
    # ? ?????? (??????? ???? 3 : ??????????)
    #--------------------------------------------------------------------------
    alias update_phase4_step3_sdva update_phase4_step3
    def update_phase4_step3
    if SDVA::ATTACK_MOVE
    if @active_battler.current_action.basic == 0
    @active_battler.current_action.move_action = true
    end
    end
    if SDVA::SKILL_MOVE
    if @active_battler.current_action.kind == 1
    @active_battler.current_action.move_action = true
    end
    end
    if SDVA::ITEM_MOVE
    if @active_battler.current_action.kind == 2
    @active_battler.current_action.move_action = true
    end
    end
    # ??????????????????????
    if @active_battler.is_a?(Game_Actor) and
    @active_battler.current_action.move_action
    # ?????
    if @active_battler.moving == 2
    update_phase4_step3_sdva
    end
    elsif @active_battler.moving == 0
    update_phase4_step3_sdva
    end
    end
    #--------------------------------------------------------------------------
    # ? ?????? (??????? ???? 6 : ??????)
    #--------------------------------------------------------------------------
    alias update_phase4_step6_sdva update_phase4_step6
    def update_phase4_step6
    @active_battler.current_action.move_action = false
    @active_battler.move_reset
    update_phase4_step6_sdva
    end
    end
    
    #==============================================================================
    # ? Spriteset_Battle
    #==============================================================================
    
    class Spriteset_Battle
    #--------------------------------------------------------------------------
    # ? ?????????
    #--------------------------------------------------------------------------
    alias initialize_sdva initialize
    def initialize
    initialize_sdva
    @viewport2.z = 1
    end
    end
    
    #==============================================================================
    # ? Arrow_Actor
    #==============================================================================
    
    class Arrow_Actor < Arrow_Base
    #--------------------------------------------------------------------------
    # ? ??????
    #--------------------------------------------------------------------------
    alias update_sdva update
    def update
    update_sdva
    # ?????
    if Input.repeat?(Input::DOWN)
    $game_system.se_play($data_system.cursor_se)
    @index += 1
    @index %= $game_party.actors.size
    end
    # ?????
    if Input.repeat?(Input::UP)
    $game_system.se_play($data_system.cursor_se)
    @index += $game_party.actors.size - 1
    @index %= $game_party.actors.size
    end
    end
    end
    
    #==============================================================================
    # ? Arrow_Enemy
    #==============================================================================
    
    class Arrow_Enemy < Arrow_Base
    #--------------------------------------------------------------------------
    # ? ??????
    #--------------------------------------------------------------------------
    alias update_sdva update
    def update
    update_sdva
    # ?????
    if Input.repeat?(Input::DOWN)
    $game_system.se_play($data_system.cursor_se)
    $game_troop.enemies.size.times do
    @index += 1
    @index %= $game_troop.enemies.size
    break if self.enemy.exist?
    end
    end
    # ?????
    if Input.repeat?(Input::UP)
    $game_system.se_play($data_system.cursor_se)
    $game_troop.enemies.size.times do
    @index += $game_troop.enemies.size - 1
    @index %= $game_troop.enemies.size
    break if self.enemy.exist?
    end
    end
    end
    end
    @sorata08: Zur genaueren Darstellung des Problemes wie oben beschrieben findest du hier ein Video,
    in welchem ich die oben ge-posteten Konfigurationen mit 200 Frames durchlaufen lasse.
    Ich denke da wird das Problem schnell klar.

    Geändert von Jerome Denis Andre (16.11.2011 um 12:37 Uhr)

  15. #15
    Okay, was nutzt du noch für Scripte oder hast du am Standard-Scriptsatz verändert? Ich sehe nicht wirklich Probleme mit dem Sideview Script im Script selbst - ebenso wenig, wenn ich das einfach über Main einfüge wie es bei dir ist und laufen lasse - läuft alles wunderbar. Also kollidiert das Sideview Script nicht mit meinem. Btw, denk dran, nichts UNTER der Main einzufügen. Die Main ist immer die unterste.

    Okay Okay, ich sehe grad, hide target in der Animation tuts jetzt nicht mehr, aber das fix ich schon noch O.o
    Edit: Nvm, das liegt an keinem der Scripte, das sieht bei mit immer so aus, selbst wenn ich alle Scripte rausnehme^^.

    Geändert von Todu (16.11.2011 um 13:36 Uhr)

  16. #16
    Zitat Zitat von Jerome Denis Andre Beitrag anzeigen
    Meintest du das so ?
    Fast. Du musst den Helden natürlich auch noch solange verstecken, wie die Target-Animation dauert.
    In deinem Fall ist die ja 10 Frames lang, also musst du den Helden nicht 26, sondern 36 Frames verstecken.

    MfG Sorata

  17. #17
    @Sorata08: Nein, dann funktioniert es immer noch nicht, denn wie ich bereits sagt, scheint der Maker die Target Ani
    erst dann anzufangen, wenn die Attacker Ani ABGESCHLOSSEN ist. Siehe auch das Video, wo ich die Attacker Ani
    auf 200 frames hochstellte, was nur bewirkte, dass der Held zwar 200 frames lang weg war, aber erst als er dann nach
    200 Frames wieder da war, die Target Ani eingeleitet wurde.

  18. #18
    Dann ist dein Kampfsystem in der Hinsicht doof gestaltet.
    Bei mir hat es stets funktioniert. oÔ
    Du könntest aber noch die Variante probieren, den Befehl erst beim letzten Frame aufzurufen und dann halt die Länge für die Target Animation anzugeben.
    Also "Frame 26: Hide Target @10"

    MfG Sorata

  19. #19
    *poke* JDA!
    Antworte noch auf mir

Berechtigungen

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