【发布时间】:2021-05-29 13:17:29
【问题描述】:
一般说明:
我正在构建这个游戏,我必须将某个球移动到一个位置,具体取决于旋转面向的位置,基本上 背景中有一堆块和一些障碍物,并且实施了碰撞检测算法,因此球在碰撞时会返回其原始位置
问题:
我需要用方向矢量移动球,但我不知道该怎么做,我一直按住空格键移动,但我希望它在单击空格键时自行移动 用一个方向向量
目标:
再一次,我希望它在单击空格键时通过方向矢量自行移动。碰撞时,我想让球反射到相反的角度,想象你把一个球扔到一面墙上,然后它又跑到另一面墙上,然后最终停下来,这怎么可能?
代码:
void collisionDetection(Entity* ball, Entity* block)
{
//Collision detection function
//Radius
const float blockRadius = 5.0f;
const float ballRadius = 2.0f;
//block coords
float xBlock = block.GetX;
float yBlock = block.GetY;
float zBlock = block.GetZ;
//ball coords
float xBall, yBall, zBall;
xBall = ball.GetX;
yBall = ball.GetY;
zBall = ball.GetZ;
//max boundaries + radius
float xMax, yMax, zMax;
xMax = xBall + blockRadius + ballRadius;
yMax = yBall + blockRadius + ballRadius;
zMax = zBall + blockRadius + ballRadius;
//min boundaries - radius
float xMin, yMin, zMin;
xMin = xBall - blockRadius - ballRadius;
yMin = yBall - blockRadius - ballRadius;
zMin = zBall - blockRadius - ballRadius;
//main process
if ((xBlock > xMin && xBlock < xMax) && (yBlock > yMin && yBlock < yMax) && (zBlock > zMin && zBlock < zMax))
{
ball.SetPosition(0, 2, 0);
}
}
void main()
{
//Blocks
std::vector<Entity*> blocks; //Declaring a vector for the blocks
float xPosition = -55; //Initial position of the wall of blocks
//For loop that automatically renders the blocks & puts them in place with proper distance between them
for (int i = 0; i < 10; i++)
{
blocks.push_back(blockEntity.Spawn(xPosition, 5, 120));
xPosition += 12; //incrementing the value of x so the blocks generate with proper distance between them
}
ballEntity.Spawn(0, 2, 0);
if(Key_(Space).isHeld)
{
ball.MoveZ(0.3f);
}
//Detecting the collision
for (Entity* block : blocks)
{
collisionDetection(ball, block);
}
}
【问题讨论】:
-
你的问题有两个部分,加上你的目标的第三部分。 1) "用方向向量移动球"; 2) 响应空格键; 3) 响应碰撞。你应该一次只做一个部分。一种可能性是(尝试)让球一直移动,而不管输入如何。完成后,您可以继续添加基于用户输入的触发机制或处理冲突。
标签: c++ vector game-physics stdvector game-development