1

こんにちは、私はここでこのチュートリアルに従ってきましたhttp://www.gogo-robot.com/2011/05/30/xna-skinned-model-animations/これまでのところ、アニメーションの再生とすべてがうまくいきましたが、今では私はそれを展開して連続ループを停止したいたとえば、aキーを押してモデルをジャンプさせるには、aキーを離したときにジャンプを停止させたいが、aキーを押したままにするとジャンプを続けさせたい. ここで私がこれまでに試したことはありますが、どれもうまくいきません。これを行う方法についてここで困惑しています。これについての助けに感謝します。

 private void HandleInput(GameTime gameTime)
    {
        currentGamePadState = GamePad.GetState(PlayerIndex.One);

        // Check for changing anims
        //SkinningData skinningData = model.Tag as SkinningData;
        SkinningData sd = jumper.model.Tag as SkinningData;

        if (currentGamePadState.Buttons.A == ButtonState.Pressed)
        {
            if (jumper.animationPlayer.CurrentClip.Name != "Fire")
                jumper.animationPlayer.StartClip(sd.AnimationClips["Fire"]);
        }


        if (currentGamePadState.Buttons.X == ButtonState.Pressed)
        {
            if (jumper.animationPlayer.CurrentClip.Name != "DieF")
                jumper.animationPlayer.StartClip(sd.AnimationClips["DieF"]);

        }

        //does not work
        if (currentGamePadState.Buttons.X == ButtonState.Released)
        {
            if (jumper.animationPlayer.CurrentClip.Name == "DieF")
                jumper.animationPlayer.StartClip(sd.AnimationClips["Idel"]);

        }


        if (currentGamePadState.Buttons.Y == ButtonState.Pressed)
        {
            if (jumper.animationPlayer.CurrentClip.Name != "Idel")
                jumper.animationPlayer.StartClip(sd.AnimationClips["Idle"]);
        }

        //does not work
        if (jumper.animationPlayer.CurrentTime ==    jumper.animationPlayer.CurrentClip.Duration)
        {
            //set him back to idel
            jumper.animationPlayer.StartClip(sd.AnimationClips["Idle"]);

        }

これらの構成を試してみましたが、ゲームでうまくいきませんでした

        // Starts playing the entirety of the given clip
    public void StartClip(string clip, bool loop)
    {
        AnimationClip clipVal = skinningData.AnimationClips[clip];
        StartClip(clip, TimeSpan.FromSeconds(0), clipVal.Duration, loop);
    }

    // Plays a specific portion of the given clip, from one frame
    // index to another
    public void StartClip(string clip, int startFrame, int endFrame, bool loop)
    {
        AnimationClip clipVal = skinningData.AnimationClips[clip];

        StartClip(clip, clipVal.Keyframes[startFrame].Time,
            clipVal.Keyframes[endFrame].Time, loop);
    }

    // Plays a specific portion of the given clip, from one time
    // to another
    public void StartClip(string clip, TimeSpan StartTime, TimeSpan EndTime, bool loop)
    {
        CurrentClip = skinningData.AnimationClips[clip];
        currentTime = TimeSpan.FromSeconds(0);
        currentKeyframe = 0;
        Done = false;
        this.startTime = StartTime;
        this.endTime = EndTime;
        this.loop = loop;

        // Copy the bind pose to the bone transforms array to reset the animation
        skinningData.BindPose.CopyTo(BoneTransforms, 0);
    }
4

1 に答える 1

2

アニメーションクリップにブール値を付けて、1回だけ再生するように指示したり、呼び出すことができるアクティブ変数を指定したりすることはできません。

于 2012-07-31T16:13:17.347 に答える