我正在设计一个pygame游戏,以便子弹向鼠标方向射击。我正在使用 用于在列表中定义项目符号的类:
class Bullet:
def __init__(self,pos,speed,size):
self.pos = pos
self.speed = speed
self.size = size
def move(self):
self.pos[0] = int(self.pos[0] + self.speed[0])
self.pos[1] = int(self.pos[1] + self.speed[1])
我正在使用这个三角函数来获得我将要射击子弹的角度向量。
def getUnitVector(x1, y1, x2, y2):
delx = x2 - x1
dely = y2 - y1
m = math.sqrt(delx * delx + dely * dely)
unit = (delx / m, dely / m)
return unit
level = [
我没有使用角度,因为我必须解决pygame舍入错误。 这些是我插入函数的变量。
mousex, mousey = pygame.mouse.get_pos()
startx = 50
starty = 400
aim = getUnitVector(startx, starty, mousex, mouse
这就是我如何处理目标并让子弹从头开始射击x,y
if pygame.mouse.get_pressed()[0]:
if reload>10:
bx = BULLETSPEED * aim[0]
by = BULLETSPEED * aim[1]
bullet = Bullet([startx,starty], [bx,by],10)
bullets.append(bullet)
reload=0
reload = reload + 1
我只是想让你知道。我正在完成一项学校作业,我将更深入地学习矢量和触发下一个单元,所以我现在不想花太多时间学习这些东西:L。此外,如果你知道任何活跃的python论坛可能更有帮助回答这个问题,请评论。我找不到任何东西。 谢谢你的时间。
我可能只是建立一个解决方法,只允许它在鼠标在20像素以内的情况下进行拍摄,以便将错误降至最低。
答案 0 :(得分:1)
子弹类应具有矩形属性,以便子弹的行进方向穿过子弹的中心。
这样做首先需要阅读Pygame文档:Pygame.Rect Docs
将子弹矩形中心放在行进方向上可以用这样的运动方法实现:
def move(self):
self.dir = self.get_direction(self.target) # get direction
if self.dir: # if there is a direction to move
self.trueX += (self.dir[0] * self.speed) # calculate speed from direction to move and speed constant
self.trueY += (self.dir[1] * self.speed)
self.rect.center = (round(self.trueX),round(self.trueY)) # apply values to bullet.rect.center
更多信息可以在这个有用的精灵运动示例中找到:Pygame Sprite Movement