al_draw_rotated_bitmap(playerTux, defaultPlayer1.size / 2, defaultPlayer1.size / 2,
defaultPlayer1.pos[0], defaultPlayer1.pos[1], mousePos / mouseSensitivity, 0);
al_draw_rotated_bitmap(playerTux, defaultPlayer2.size / 2, defaultPlayer2.size / 2,
defaultPlayer2.pos[0], defaultPlayer2.pos[1], 0, 0);
此函数在while循环的每个循环处绘制播放器在给定位置和给定角度的位图。由于鼠标在x轴上的移动,键盘中的事件和播放器的角度会改变运动。忽略mouseSensitivity的除法(这是一个内部方面)。考虑到可以通过移动鼠标将播放器完美地旋转到自己的轴上。 (OBS:武器的图像已经在玩家的图像上,因此武器与玩家一起旋转)。
if (state.buttons & 1) {
al_draw_rotated_bitmap(pistolFire, defaultPlayer1.size / 8, defaultPlayer1.size / 2,
defaultPlayer1.pos[0], defaultPlayer1.pos[1], mousePos / mouseSensitivity, 0); }
现在,按下鼠标左键时,武器末端会出现“火图像”。
考虑到这一切,我们让我们的玩家在地图上移动(在W,A,S,D的每个事件中增加和减少它自己的xPos和yPos),并且我们在地图上有另一个玩家拥有相同的玩家容量。当我们发射武器时(当我们按下鼠标的左键时),如果他在武器的角度范围内,我们必须击中另一个玩家。
问题是:我该怎么办?
if (state.buttons & 1) {
detectShotColision(); }
我怎么能写出这样一个功能,只考虑武器的角度和两个球员的x和y位置?
答案 0 :(得分:1)
您可以使用atan2()来计算玩家之间的角度。如果它等于(在一些可接受的三角形内)枪面对的角度,则玩家被击中。
如果玩家之间可能存在吸收命中的东西,那么你需要沿着射击方向走一条线。您可以将两者结合起来以获得优化的解决方案。