我正在使用python进行游戏,目前有两个"特工" DOESN' T MOVE和射击,另一个移动并被射击。很遗憾,我还无法发布图片。想象一下两个三角形的特工,子弹的红色圆圈。我们使用vector2D' s(我们的讲师类)代表代理商,我也将它用于子弹。
目前,我的代码会从射手那里产生子弹,但目标是在射击时逃避代理人的当前位置 - 而不是目标。不仅如此,它似乎也从对面生产子弹。
提前为糟糕的代码道歉 - 这是我目前正在拍的'功能呢。
def shoot(self, target_pos, target):
''' move towards target position '''
toTarget = (self.targetpos - self.pos)
relativeHeading = self.heading.dot(self.targetheading)
lookAheadTime = toTarget.length() / (self.max_speed + 40)
lookAheadTime += (1 - self.heading.dot(self.targetpos))* - self.max_turnrate
lookAheadPos = self.targetpos + self.targetvelocity * lookAheadTime
desired_vel = (lookAheadPos - self.pos).normalise() * self.max_speed
print(lookAheadPos)
trueVel = desired_vel - self.vel
if (toTarget.dot(self.heading)>0) and (relativeHeading < 0.95):
return trueVel
return trueVel
这用于&#39;计算&#39;这是传递给&#39;更新&#39; (完成世界空间的每个更新步骤。)
def calculate(self, delta, targetpos):
# reset the steering force
force = self.shoot(self.targetpos, self.world.agents[0])
return force
以下是更新中发生的情况。目前,子弹也会产生一些奇怪的抖动。
bulPos = (self.pos - self.targetpos).length()
self.distCovered += 1
if self.distCovered > 250:
self.world.bullets.remove(self)
self.world.bulletsize -= 1
toTarget = self.targetpos - self.pos
if toTarget.lengthSq() <= self.targetradius:
self.explode()
在座席类中,项目符号的更新会附加项目符号。
if self.world.bulletsize <= 10:
self.world.bullets.append(Bullet(self.world.hunter.pos.x, self.world.hunter.pos.y, self.world.agents[0], self.world))
self.world.bulletsize += 1