C# 如何检查wp7 XNA触控事件是否在定义的矩形内
我想检查用户单击是否在我定义的一组重角内,但我是否应该用另一种方法进行检查 这就是我现在拥有的,但我不知道如何比较矩形对象和触摸对象C# 如何检查wp7 XNA触控事件是否在定义的矩形内,c#,windows-phone-7,xna,C#,Windows Phone 7,Xna,我想检查用户单击是否在我定义的一组重角内,但我是否应该用另一种方法进行检查 这就是我现在拥有的,但我不知道如何比较矩形对象和触摸对象 private bool CheckEnemyClicked(Vector2 vector2, out Enemy enemyOut) { TouchCollection touches = TouchPanel.GetState(); foreach (Enemy enemy in enemies) { //Find t
private bool CheckEnemyClicked(Vector2 vector2, out Enemy enemyOut)
{
TouchCollection touches = TouchPanel.GetState();
foreach (Enemy enemy in enemies)
{
//Find the rectangle of the sprite
Rectangle rectangle = new Rectangle(
(int)enemy.Position.X,
(int)enemy.Position.Y,
enemy.Width,
enemy.Height);
//Check if click is hitting enemy
if(touchinput is within rectangle)
{
enemyOut = enemy;
return true;
}
}
enemyOut = null;
return false;
}
TouchCollection
是触摸点的集合(因为用户可能在多个位置触摸屏幕)。您应该检查TouchCollection
中的各个触摸点,并找到它们相对于您的敌人矩形的位置。TouchCollection
是触摸点的集合(因为用户可能在多个位置触摸屏幕)。您应该检查TouchCollection
中的各个接触点,并找到它们相对于您的敌人矩形的位置。TouchCollection返回一个包含“位置”成员的TouchLocation对象集合。矩形有一个Contains方法,该方法有一个重载,可以检查某个特定点是否包含在其中。因此,XNA框架为您完成了所有艰巨的工作
对于触摸的碰撞检查部分,您的代码看起来像这样
//Check if click is hitting enemy
foreach (TouchLocation location in collection)
{
if (rectangle.Contains((int)location.Position.X, (int)location.Position.Y))
{
enemyOut = enemy;
return true;
}
}
TouchCollection返回具有“位置”成员的TouchLocation对象的集合。矩形有一个Contains方法,该方法有一个重载,可以检查某个特定点是否包含在其中。因此,XNA框架为您完成了所有艰巨的工作 对于触摸的碰撞检查部分,您的代码看起来像这样
//Check if click is hitting enemy
foreach (TouchLocation location in collection)
{
if (rectangle.Contains((int)location.Position.X, (int)location.Position.Y))
{
enemyOut = enemy;
return true;
}
}
所以做一个for循环,检查所有的点?这将是10000(100x100像素)操作每个精灵我正在检查,这不是一个问题,如果我有10-20个精灵在屏幕上,这样做30次每秒?你需要某种场景管理。我想到了一个四叉树,这对于动画对象来说可能很困难。但你也只需要检查所有可见的物体,屏幕上没有的东西是不能触摸的。现在,您只需迭代所有用户触摸,对四叉树单元格中的可见对象进行测试,并将测试减少到最小。当然,如果你确定这个特殊的触摸是在sprite rect中,你只需要测试每个像素。那么做一个for循环并检查所有的点?这将是10000(100x100像素)操作每个精灵我正在检查,这不是一个问题,如果我有10-20个精灵在屏幕上,这样做30次每秒?你需要某种场景管理。我想到了一个四叉树,这对于动画对象来说可能很困难。但你也只需要检查所有可见的物体,屏幕上没有的东西是不能触摸的。现在,您只需迭代所有用户触摸,对四叉树单元格中的可见对象进行测试,并将测试减少到最小。当然,如果您确保这个特定的触摸在sprite rect中,那么您只能测试每个像素。