gpt4 book ai didi

c# - 无法使用 Rectangle.Intersects() 正确检测碰撞

转载 作者:太空狗 更新时间:2023-10-29 23:24:32 26 4
gpt4 key购买 nike

我使用单个 sprite 表图像作为我的突破游戏的主要纹理。图片是这样的:

breakout_sprite_sheet

我的代码有点困惑,因为我使用 Point 从同一纹理创建两个元素,以表示元素大小及其在工作表上的位置,Vector,表示它在视口(viewport)上的位置,Rectangle 表示元素本身。

Texture2D sheet;

Point paddleSize = new Point(112, 24);
Point paddleSheetPosition = new Point(0, 240);
Vector2 paddleViewportPosition;
Rectangle paddleRectangle;

Point ballSize = new Point(24, 24);
Point ballSheetPosition = new Point(160, 240);
Vector2 ballViewportPosition;
Rectangle ballRectangle;
Vector2 ballVelocity;

我的初始化也有点困惑,但它按预期工作:

paddleViewportPosition = new Vector2((GraphicsDevice.Viewport.Bounds.Width - paddleSize.X) / 2, GraphicsDevice.Viewport.Bounds.Height - (paddleSize.Y * 2));
paddleRectangle = new Rectangle(paddleSheetPosition.X, paddleSheetPosition.Y, paddleSize.X, paddleSize.Y);

Random random = new Random();
ballViewportPosition = new Vector2(random.Next(GraphicsDevice.Viewport.Bounds.Width), random.Next(GraphicsDevice.Viewport.Bounds.Top, GraphicsDevice.Viewport.Bounds.Height / 2));
ballRectangle = new Rectangle(ballSheetPosition.X, ballSheetPosition.Y, ballSize.X, ballSize.Y);
ballVelocity = new Vector2(3f, 3f);

绘图:

spriteBatch.Draw(sheet, paddleViewportPosition, paddleRectangle, Color.White);
spriteBatch.Draw(sheet, ballViewportPosition, ballRectangle, Color.White);

问题是我无法使用以下代码正确检测到碰撞:

if(ballRectangle.Intersects(paddleRectangle))
{
ballVelocity.Y = -ballVelocity.Y;
}

我做错了什么?

最佳答案

您正在根据 sourceRectangles 测试碰撞用于 Sprite 表纹理。这些矩形(paddleRectangleballRectangle)是根据纹理坐标定义的——这就是那些 Sprite 在工作表上的位置。测试这些矩形的碰撞是没有意义的。

您需要使用屏幕坐标进行碰撞,即您需要用屏幕位置定义不同的矩形:

Rectangle paddleViewportRectangle = new Rectangle(paddleViewportPosition.X, 
paddleViewportPosition.Y,
paddleSize.X,
paddleSize.Y);

Rectangle ballViewportRectangle = new Rectangle(ballViewportPosition.X,
ballViewportPosition.Y,
ballSize.X,
ballSize.Y);

if(ballViewportRectangle.Intersects(paddleViewportRectangle))
{
ballVelocity.Y = -ballVelocity.Y;
}

关于c# - 无法使用 Rectangle.Intersects() 正确检测碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13923602/

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