在C#中键入动画
本文关键字:动画 | 更新日期: 2023-09-27 18:22:14
我一直在遵循一个教程,并对其进行修改以制作自己的游戏。我来到这一部分,正在致力于实现抛射体的创建和动画。
在他的教程中,他用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"改成了另一个名字,因为我遇到了错误(我不知道他是怎么做到的))。
现在子弹实际上是在发射,但它不是一次射出一颗,而是连续射出几颗。
我想知道这是否与他在课堂上制作的Update函数有关。因为我把它改成了Texture2D,它不像他在动画类型中那样工作。
public void Update(GameTime gameTime)
{
Position.X += laserMoveSpeed;
LaserAnimation.Position = Position;
LaserAnimation.Update(gameTime);
}
这就是他的样子。但在我的问题上,我不得不注释掉第2行和第3行,因为Texture2D没有这些函数调用。那些人在做什么,会让我的子弹"幽灵般",而不是在新子弹被拔出之前消失。
现在子弹实际上在发射,但没有射出一颗一次,它会连续显示几个。
如果您查看Game1
类的UpdatePlayer()
中的FireLaser()
调用
if (_currentKeyboardState.IsKeyDown(Keys.Space) || _currentGamePadState.Buttons.X == ButtonState.Pressed)
{
FireLaser(gameTime);
}
您将看到当空格键或游戏板的X按钮按下时调用FireLaser()。由于MonoGame的Update
每秒被调用60次,它会导致FireLaser
被调用多次,直到您松开按钮。
如果您想避免它,请保存以前的状态,并检查它以前是否未被按下。
if (_currentKeyboardState.IsKeyDown(Keys.Space) && _previousKeyboardState.IsKeyReleased(Keys.Space))
{
FireLaser(gameTime);
}
_previousKeyboardState = _currentKeyboardState;
FireLaser()
将在每次空格键点击时调用一次