有没有办法禁用碰撞?

问题描述

我正在 Python Arcade 中构建一个游戏,它将在关卡中运行 NEAT AI。我试图找到一种让玩家的多个实例同时运行但不发生碰撞的方法。有没有办法做到这一点?碰撞类型似乎只是在碰撞发生时处理碰撞,而不是阻止它们。我需要它们能够与地板和物品发生碰撞,而不会与其他“玩家”发生碰撞。

解决方法

您可以创建两个 SpriteList:一个用于 players,一个用于 items,然后检查 playersitems 之间的碰撞,而不是 players 之间的碰撞。

示例:

import arcade

class Collision(arcade.Window):
    def __init__(self):
        super().__init__(600,200,'Collision!')
        self.text = ''
        self.players = arcade.SpriteList()
        self.player1 = arcade.Sprite(':resources:images/animated_characters/male_person/malePerson_idle.png',center_x=50,center_y=100)
        player2 = arcade.Sprite(':resources:images/animated_characters/female_person/femalePerson_idle.png',center_x=200,center_y=100)
        self.players.extend([player2,self.player1])
        self.items = arcade.SpriteList()
        item = arcade.Sprite(':resources:images/items/star.png',center_x=400,center_y=90)
        self.items.append(item)

    def on_draw(self):
        arcade.start_render()
        self.items.draw()
        self.players.draw()
        arcade.draw_text(self.text,250,160,arcade.color.RED,24)

    def update(self,delta_time: float):
        self.player1.center_x += 2

        if arcade.check_for_collision_with_list(self.player1,self.items):
            self.text = 'Collide!'
        else:
            self.text = ''

Collision()
arcade.run()

输出:

enter image description here