当前位置: 首页 > 知识库问答 >
问题:

未使用del[duplicate]销毁的类的实例

翟奇
2023-03-14

我试图删除一个对象(在这种情况下,和一个水果类的实例),当它与我的蛇的头相交。问题是,当它检测到一个水果对象时,del似乎没有做任何事情。我不知道我是否没有正确实现删除函数,或者这可能与我如何将对象馈送到函数有关。

下面是处理游戏功能的main.py脚本的一部分:

    # Main loop
    while running:
        # event handling, gets all event from the event queue
        for event in pygame.event.get():
            # only do something if the event is of type QUIT
            if event.type == pygame.QUIT:
                # change the value to False, to exit the main loop
                running = False

        # Modify game fruit properties
        if fruit_tick < 50:
            fruit_tick += 1
        else:
            game.spawn_fruit()
            fruit_tick = 0

        # Modify game player properties
        if not game.player_python:
            game.spawn_player()
        else:
            game.player_python.move()
            game.player_python.detect_object(game.get_objects())

        # Modify display properties
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
        game.draw_shapes()
        pygame.display.flip()

以下是当头位于Fruit对象的相同位置时执行的函数:

    # Detect object
    def detect_object(self, objects):
        for obj in objects:
            if obj.pivot == self.location:
                if isinstance(obj, Fruit):
                    self.grow(obj.get_growth())
                    del obj

如果我添加一个print()语句在if is实例(obj, Fruit):下,它执行没有问题。问题是del obj什么都不做。

共有1个答案

唐健
2023-03-14

不要在循环时删除迭代器变量或列表中的项,因为这是一种不好的做法,无论如何,请尝试另一种方法。也许可以通过以下方式删除某些对象

# Detect object
def detect_object(self, objects):
    del_indices = []

    for i in len(objects):
        obj = objects[i]

        if obj.pivot == self.location:
            if isinstance(obj, Fruit):
                self.grow(obj.get_growth())
                # del obj
                del_indices.append(i)

    # Remove some objects
    new_objects = []

    for i in len(objects):
        if not i in del_indices:
            new_objects.append(objects[i])

    objects = new_objects
    # return objects
 类似资料:
  • 有没有办法销毁特定类的所有创建的会话范围bean(并在需要时让spring重新创建)? 例如,两个用户访问应用程序,然后每个用户将有一个bean。我想毁掉这两颗豆子。 用例: 管理员正在更新菜单栏。菜单栏列表数据存储在会话范围的bean中。管理员的bean应该被销毁,菜单栏应该被更新。当然,其他人的菜单也应该更新,所以其他bean也应该被销毁。 注1:不同的用户可能会看到不同的菜单,因此bean是

  • 对象使用完之后需要对其进行清除。对象的清除是指释放对象占用的内存。在创建对象时,用户必须使用 new 操作符为对象分配内存。不过, 在清除对象时,由系统自动进行内存回收,不需要用户额外处理。这也是 Java 语言的一大特色,某种程度上方便了程序员对内存的管理。 Java 语言的内存自动回收称为 垃圾回收(Garbage Collection)机制,简称 GC。垃圾回收机制是指 JVM 用于释放那些

  • 销毁 Destroy 在不需要使用iScoll的时候调用iScroll实例的公共方法destroy()可以释放一些内存。 myScroll.destroy(); myScroll = null;

  • 本文向大家介绍ios 单利的完整使用实例 及销毁 宏定义,包括了ios 单利的完整使用实例 及销毁 宏定义的使用技巧和注意事项,需要的朋友参考一下 如下所示: 以上这篇ios 单利的完整使用实例 及销毁 宏定义就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 问题内容: 我对垃圾收集器在Java中的工作方式有一个大致的了解,但是我销毁对象的原因不是因为我关心释放内存,而是因为功能。我可以用一个例子更好地解释: 假设我正在制作涉及金钱的游戏。当某人从地面上捡起一个物体时,我想调用该物体的方法,该方法涉及为该人的钱包添加一个值。 之后发现,我不希望别人能够把它捡起来。换句话说,我不希望自己或任何其他程序能够不经意间拨打电话: 因此,在Bob拿起钱后,它的价

  • 本文向大家介绍vue 组件销毁并重置的实现,包括了vue 组件销毁并重置的实现的使用技巧和注意事项,需要的朋友参考一下 方法1 当数据变更后,通过watch 监听,先去销毁当前的组件,然后再重现渲染。使用 v-if 可以解决这个问题 方法2 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。