当用户点击q发射子弹时,没有平滑的运动。他们需要在屏幕上移动鼠标以便子弹移动
我试着在StackOverflow,youtube上搜索,重新整理代码
def tank(x,y,turretpos):
x = int(x)
y = int(y)
possibleturrets = [(x-25, y-2), (x-25, y-4), (x-25, y-6), (x-25, y-8), (x-24, y-10),
(x-24, y-12), (x-23, y-14), (x-20, y-16), (x-18, y-18), (x-16, y-20)]
pygame.draw.circle(screen,black,(x,y),10)
pygame.draw.rect(screen,black,(x-tankheight,y,tankwidth,tankheight))
pygame.draw.line(screen,black,(x,y),possibleturrets[turretpos], turretwidth)
pygame.draw.line(screen,black,(x,y),possibleturrets[turretpos], turretwidth)
startx = 15
for i in range(7):
pygame.draw.circle(screen,black,(x-startx,y+20),wheelwidth)
startx -= 5
return possibleturrets
def fire(gun,tankx,tanky,turretpos):
fire = True
startingshellx = gun[0][0]
startingshelly = gun[0][1]
while fire:
for event in pygame.event.get():
startingshellx -= (12-turretpos)*2
startingshelly += int((((startingshellx - (gun[0][0]))*0.015)**2) - (turretpos+turretpos/(12-turretpos)))
pygame.draw.circle(screen,red,(startingshellx, startingshelly-turretpos),5)
if startingshelly > height-100:
fire = False
pygame.display.update()
我希望用户点击q,子弹应该以抛物线形状发射
您必须更新主循环而不是事件循环中的位置。注意,事件循环仅在事件发生时执行。这意味着当按下按钮时执行一次,当松开按钮时执行第二次。鼠标的移动也是一个事件,并导致执行事件循环
以下方法可能有效。内部事件处理由^{} 完成,而不是事件循环:
但我建议改变设计。避免使用同名函数和变量。不要在主循环中添加显示更新的额外循环:
如果要生成平滑运动,则必须使用flooting point值进行计算:
绘制对象(圆)时,将(^{} )或^{} 坐标转换为整数值:
注意:如果该值在添加之前被截断为整数值,则小数位数将丢失:
如果稍后执行强制转换操作,则只会丢失结果的小数位:
^{} 给出下一个grater整数值,如果小数位为>;=0.5分:
相关问题 更多 >
编程相关推荐