G'day All,
В моей маленькой игре 5 прыгающих мячей и 1 игрок. Сначала я написал код для прыгающих шариков, и каждый шарик имеет метод обнаружения столкновений:
foreach (Bouncer bouncer in Game.Components) //For each bouncer component in the game...
{
if (bouncer != this)// Don't collide with myself
{
if (bouncer.collisionRectangle.Intersects(this.collisionRectangle))
{
// How far apart of the positions of the top right hand corners of the sprites when they hit?
int deltaX = Math.Abs((int)this.position.X - (int)bouncer.position.X);
int deltaY = Math.Abs((int)this.position.Y - (int)bouncer.position.Y);
// This is the width and height of a sprite so when two sprites touch this is how far the corners are from each other.
int targetWidth = 80;
int targetHeight = 80;
// The following determins the type of collision (vert hit vs horiz hit)
// Because the app is driven by a game based timer the actual amount of sprite overlap when the collision detection occurs is variable.
// This bit of simple logic has a 10 pixel tollerance for a hit.
// If target - delta is > 10 it will be interpreted as overlap in the non-colliding axis.
// If both if statements are triggered it is interpreted as a corner collision resulting in both sprites rebounding back along the original paths.
if (targetWidth - deltaX < 10) // The hit is a side on hit.
{
this.velocity.X *= -1;
}
if (targetHeight - deltaY < 10) // The hit is a vertical hit
{
this.velocity.Y *= -1;
}
this.numberOfCollisions = this.numberOfCollisions + 1;
}
}
}
base.Update(gameTime);
}
Затем я добавил компонент игрока, и колеса отвалились. Приложение компилируется нормально, но когда я его запускаю, я получаю InvalidCastException и сообщение:
Unable to cast object of type 'Bounce2.Player' to type 'Bounce2.Bouncer'.
Я не хочу включать объект игрока в этот детектор столкновений.
Есть ли способ, которым я могу перечислить свой путь через объекты Bouncer и исключить любые другие объекты?
Спасибо,
Эндрю.