gpt4 book ai didi

c# - C# 中的动画类型

转载 作者:太空宇宙 更新时间:2023-11-03 12:56:13 24 4
gpt4 key购买 nike

我一直在学习教程并修改它来制作我自己的游戏。我来了this部分,并正在致力于实现射弹创建和动画。

在他的教程中,他用public Animation LaserAnimation;开始上课,但我似乎没有“Animation”类型的命名空间。

所以我决定尝试使用常规 Texture2D 类型来实现它,并想出了以下...

这是子弹类中声明的纹理。

public Texture2D BulletTexture;

并且在主游戏类中,我将他的两个函数转换为...

protected void FireBullet(GameTime gameTime) {
if(gameTime.TotalGameTime - previousBulletSpawnTime > bulletSpawnTime) {
previousBulletSpawnTime = gameTime.TotalGameTime;
AddBullet();
}
}

protected void AddBullet() {

//Load Bullet Texture
Texture2D bulletAnimation = Content.Load<Texture2D>("Graphics\\bullet2");

//Draw Bullet
spriteBatch.Begin();
spriteBatch.Draw(bulletAnimation, player.Position, null, Color.White, 0f, Vector2.Zero, 1f, SpriteEffects.None, 0f);
spriteBatch.End();

Bullet bullet = new Bullet();

var bulletPosition = player.Position;
bulletPosition.Y += 60;
bulletPosition.X += 44;

bullet.Initialize(bulletAnimation, bulletPosition);
bullets.Add(bullet);

但是好像不行。我的意思是,当我按下空格键让它开火时,没有绘制任何东西。这个转换的哪一部分我错了,或者我错过了一些基本的东西。

编辑:好吧,看来我太急于测试这部分而没有看到我需要添加的最后一部分......

// Draw the lasers.
foreach (var l in laserBeams)
{
l.Draw(spriteBatch);
}

所以我已经继续这样做了(尽管我在遇到错误时将“1”更改为不同的名称(我不知道他是如何让它工作的))。

现在子弹确实在发射,但不是一次发射一颗,而是连续发射几颗。

我想知道这是否与他在类里面制作的更新功能有关。因为我将其更改为 Texture2D,所以它不像他那样用于动画类型。

public void Update(GameTime gameTime)
{
Position.X += laserMoveSpeed;
LaserAnimation.Position = Position;
LaserAnimation.Update(gameTime);
}

这是他的样子。但在我的身上,我不得不注释掉第 2 行和第 3 行,因为 Texture2D 没有那些函数调用。那些人在做什么会导致我的子弹“重影”并且在绘制新子弹之前不会消失。

最佳答案

And now the bullets are in fact firing, but instead of coming out one at a time, it shows several in a row.

如果您查看 Game1 类的 UpdatePlayer() 中的 FireLaser() 调用

    if (_currentKeyboardState.IsKeyDown(Keys.Space) || _currentGamePadState.Buttons.X == ButtonState.Pressed)
{
FireLaser(gameTime);
}

您会看到在空格键或游戏 handle 的 X 按钮被向下/按下 时调用 FireLaser()。由于 MonoGame 的 Update 每秒被调用 60 次,这导致 FireLaser 被调用多次,直到您释放按钮。

如果你想避免它,保存之前的状态并检查它之前没有被按下。

    if (_currentKeyboardState.IsKeyDown(Keys.Space) && _previousKeyboardState.IsKeyReleased(Keys.Space))
{
FireLaser(gameTime);
}
_previousKeyboardState = _currentKeyboardState;

FireLaser() 将在每次空格键点击时调用一次

关于c# - C# 中的动画类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33748550/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com