现在当我点击空格键时,它会向左或向右移动,我希望球首次直线移动。然后,当球击中墙壁,阻挡线后,我希望球以“-1”不知何故。这是我的第一个学校游戏项目,这是一个单线乒乓游戏。如何在不同的方向移动球?
编辑:编辑我已经添加了“boll_speed.X = random.Next(-1,1);”,而且完美地工作!
- linje =行
- LIV =生活
- 铃=球
- =POÄNG波昂点
- 我不使用 “blockröd= blockred” 现在
blockgrön= blockgreen
public class Game1 : Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; SpriteFont spritefont; Texture2D linje_texture; Texture2D boll_texture; Texture2D blockröd_texture; Texture2D blockgrön_texture; Texture2D gameover_texture; Rectangle linje_rect; Rectangle boll_rect; Rectangle blockröd_rect; Rectangle blockgrön_rect; Rectangle gameover_rect; Vector2 linje_speed; Vector2 boll_speed; Random random; int liv; int poang; int highscore; List<Rectangle> block = new List<Rectangle>(); bool Start = false; public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; graphics.PreferredBackBufferWidth = 760; graphics.PreferredBackBufferHeight = 620; } protected override void Initialize() { linje_speed.X = 5f; boll_speed.X = boll_speed.X = random.Next(-1, 1); boll_speed.Y = 6f; liv = 3; poang = 0; random = new Random(); base.Initialize(); } protected override void LoadContent() { spriteBatch = new SpriteBatch(GraphicsDevice); spritefont = Content.Load<SpriteFont>("Fonts/Myfont"); linje_texture = Content.Load<Texture2D>("Pics/linje-lång"); boll_texture = Content.Load<Texture2D>("Pics/boll"); blockgrön_texture = Content.Load<Texture2D>("Pics/block-grön"); blockröd_texture = Content.Load<Texture2D>("Pics/block-röd"); gameover_texture = Content.Load<Texture2D>("Pics/GameOver"); linje_rect = new Rectangle((Window.ClientBounds.Width - linje_texture.Width)/2, 580, linje_texture.Width, linje_texture.Height); boll_rect = new Rectangle((Window.ClientBounds.Width - boll_texture.Width)/2, 556, boll_texture.Width, boll_texture.Height); gameover_rect = new Rectangle((Window.ClientBounds.Width/2) - (gameover_texture.Width/2), (Window.ClientBounds.Height/2) - gameover_texture.Height/2, gameover_texture.Width, gameover_texture.Height); block.Add(blockgrön_rect); block.Add(blockröd_rect); for (int i = 1; i < 5; i++) { for (int g = 1; g < 13; g++) { block.Add(new Rectangle((g * 63) - 60, (i * 40), blockgrön_texture.Width, blockgrön_texture.Height)); } } } protected override void UnloadContent() { // TODO: Unload any non ContentManager content here } protected override void Update(GameTime gameTime) { if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) Exit(); if (Start == true) { boll_rect.X += (int)boll_speed.X; boll_rect.Y += (int)boll_speed.Y; } if(Start == false) { boll_rect.X = linje_rect.X + ((linje_texture.Width/2) - (boll_texture.Width/2)); } if (boll_rect.X > Window.ClientBounds.Width - boll_texture.Width || boll_rect.X < 0) boll_speed.X *= -1; if (boll_rect.Y > Window.ClientBounds.Height - boll_texture.Height || boll_rect.Y < 0) boll_speed.Y *= -1; if (boll_rect.Y > Window.ClientBounds.Height - boll_texture.Height) { liv -= 1; Start = false; boll_rect.X = (Window.ClientBounds.Width - boll_texture.Width)/2; boll_rect.Y = 556; linje_rect.X = (Window.ClientBounds.Width - linje_texture.Width)/2; linje_rect.Y = 580; } KeyboardState ks = Keyboard.GetState(); if (ks.IsKeyDown(Keys.Left)) { linje_rect.X -= (int)linje_speed.X; } else if (ks.IsKeyDown(Keys.Right)) { linje_rect.X += (int)linje_speed.X; } else if (ks.IsKeyDown(Keys.Space)) { Start = true; } if (linje_rect.X > Window.ClientBounds.Width - linje_texture.Width) linje_rect.X = (Window.ClientBounds.Width - linje_texture.Width); if (linje_rect.X < 0) linje_rect.X = 0; if (linje_rect.Intersects(boll_rect)) { boll_speed.Y *= -1; } base.Update(gameTime); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.Black); spriteBatch.Begin(); if (liv > 0) { spriteBatch.Draw(linje_texture, linje_rect, Color.White); spriteBatch.Draw(boll_texture, boll_rect, Color.White); spriteBatch.DrawString(spritefont, "Liv kvar: " + liv, Vector2.Zero, Color.White); spriteBatch.DrawString(spritefont, "Points: " + poang, new Vector2(350, 0), Color.White); spriteBatch.DrawString(spritefont, "Highscore: " + highscore, new Vector2(660, 0), Color.White); foreach (Rectangle g in block) { spriteBatch.Draw(blockgrön_texture, g, Color.White); } } if (liv == 0) { spriteBatch.Draw(gameover_texture, gameover_rect, Color.White); } spriteBatch.End(); base.Draw(gameTime); } }
遇到问题:我想
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
Exit();
if (Start == true)
{
boll_rect.X += (int)boll_speed.X;
boll_rect.Y += (int)boll_speed.Y;
}
if (boll_rect.X > Window.ClientBounds.Width - boll_texture.Width || boll_rect.X < 0)
boll_speed.X *= -1;
if (boll_rect.Y > Window.ClientBounds.Height - boll_texture.Height || boll_rect.Y < 0)
boll_speed.Y *= -1;
else if (ks.IsKeyDown(Keys.Space))
{
Start = true;
}
if (linje_rect.Intersects(boll_rect))
{
boll_speed.Y *= -1;
boll_speed.Y += random.Next(-100, 101)/100.0f;
boll_speed.X *= -1;
boll_speed.X += random.Next(-100, 101)/100.0f;
}
因此,这段代码的哪个部分是你遇到问题? – UnholySheep
乒乓球游戏中的球通常会根据桨的击球位置以及桨的速度而改变'y'速度(或'x'速度,我不确定桨的方向如何)。此外,似乎同样的问题已经[在gamedev上回答](http://gamedev.stackexchange.com/q/4253/38920)。这个答案的作者在[richardcarter.org](http://richardcarter.org/)上有一个演示游戏的主页。 – Groo
我可以复制所有的代码,让你了解更多。基本上我想第一次让球直行。当我在开始时按空格键,但它会按不同的方向。现在它一直在上升和下降。我会查看该页面! –