我正在使用python在pygame模块中创建一个战斗/战斗系统。基本上,我有一只老鼠,由ratX和ratY控制,而我有一个玩家,由var x和y控制。老鼠只会简单地跟随玩家输入以下代码:
if movement == True:
if x > 0:
if ratX != x:
if ratX > x:
ratX -= 1
ratFacing = 1
else:
ratX += 1
ratFacing = -1
if y > 0:
if ratY != y+30:
if ratY > y+30:
ratY -= 1
else:
ratY += 1
此后,一旦老鼠靠近玩家(至少40像素),则此代码将使用距离公式检测到这一点并减去玩家的生命值:
if (math.sqrt( ( (ratX - x) **2) + ( (ratY - y)**2) ) < 40):
x -= 10*ratFacing
if plyrHealth > 1:
plyrHealth -= 1
ratX += 40*ratFacing
else:
run = False
现在,我添加了一个战斗系统,玩家可以挥动剑,物品将基于变量“ ra”旋转。如果该变量等于-55,则表示玩家已经达到了剑可以造成伤害的程度。如果玩家在范围内(至少100像素),则表示玩家可以攻击老鼠并对其造成伤害:
if ra == -55 and (math.sqrt( ( (ratX - x) **2) + ( (ratY - y)**2) ) < 100): #Line that checks if sword has swung and the plyr is in range
dam = itemInHand[11] #This is the amount of damage that the specific sword in hand does
if isJump:
dam *= 3
if ratHealth - dam <= 0:
ratHealth = 0
else:
ratHealth -= dam
与此有关的主要问题是,从那时起我便使用距离公式,而我只是检查玩家是否在那只老鼠的射程之内,即使他们没有面对它也可以攻击敌人。例如,是否有一种方法可以创建线迹,该线迹将返回与之碰撞的所有对象的列表?这样,它将检测到冲突的唯一方法是,如果有一条不可见的线与它发生碰撞,则返回true。有内置的方法可以在python中执行此操作,还是可以自己创建此方法?任何帮助,将不胜感激。
答案 0 :(得分:0)
现在,我在pygame中没有经验,但是我认为,您要的是仅过滤那些处于近战范围内的对象(敌人,老鼠,可能是灌木丛等)。
因此,我们需要一个由近程范围组成的元组(x,y)组成的数组。拥有拔剑者将始终拥有一把。有很多方法可以确定它,所以我将坚持使用常量数组。
range = [(100,100),(100,101)]
现在我们过滤范围内的对象。
objects_in_melee_range = [obj for obj in all_game_objects if (obj[0],obj[1]) in range]