Ошибка при вращении снаряда и выстреле
Код написан на языке C#, а IDE-визуальная среда Studio2017.my код и активы находятся по адресу diliupg / Space_Battles — Bitbucket[^].
Мой код вращения космического корабля имеет что-то неправильное, потому что, когда я стреляю, снаряд стреляет из середины космического корабля. Других ошибок нет. Как я могу заставить космический корабль стрелять спереди?
Что я уже пробовал:
Я создаю лазерный выстрел, когда нажимаю пробел вот так:
<pre> if (keyboard.IsKeyDown(Keys.Space) && shoot) { shoot = false; //is.fireInst.Play(); this.fire.Play(.2f, .9f, 0); lazerX = (float)(spritePosX - (0) * Math.Cos(rotationAngle)); lazerY = (float)(spritePosY - (0) * Math.Sin(rotationAngle)); Projectile projectile = new Projectile(heroLazer, "heroLazer", lazerX, lazerY, rotationAngle); Game1.AddProjectile(projectile); } // then in the projectile class: public Projectile(Texture2D lazerSprite, string spriteName, float posx, float posy, float heading) { projectileSprite = lazerSprite; type = spriteName; spriteRotOrigin = new Vector2(projectileSprite.Width / 2, projectileSprite.Height / 2); spriteHeading = heading; spritePosX = posx; // the x position of the lazer spritePosY = posy; // the y position of the lazer spritePos = new Vector2(spritePosX, spritePosY); drawRectangle = new Rectangle((int)spritePosX, (int)spritePosY, projectileSprite.Width / 2, projectileSprite.Height / 2); } // then in the update method <pre>public void update(GameTime gameTime, KeyboardState keyboard) { //projectile active or not? if (active == true) { projectileAge += gameTime.ElapsedGameTime.Milliseconds; spritePosX += (float)(Math.Sin(spriteHeading) * gameTime.ElapsedGameTime.TotalMilliseconds) * ProjectileMoveAmount; spritePosY -= (float)(Math.Cos(spriteHeading) * gameTime.ElapsedGameTime.TotalMilliseconds) * ProjectileMoveAmount; spritePos = new Vector2(spritePosX, spritePosY); } if (projectileAge > projectileLife) { active = false; } } // then in the draw method like this <pre lang="c#">public void Draw(SpriteBatch spriteBatch) { //spriteBatch.Draw(projectileSprite, drawRectangle, Color.White); spriteBatch.Draw(projectileSprite, spritePos, null, Color.FromNonPremultiplied(255, 255, 255, 255), spriteHeading, spriteRotOrigin, 1.0f, SpriteEffects.None, 0f); }