微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

动态生成新对象

如何解决动态生成新对象

在我的俄罗斯方块游戏中,如果原始立方体消失,我无法创建新立方体。当我使用这种方法时,我的第一个立方体消失了,而新的立方体出现了。我想用相似的方法制作两个相似的立方体
有我的代码

from ursina import *
from random import randint


class CubeSprite(object):
    dawn = 0
    e = Sprite(model='square',color=color.orange,scale_y=0.25,scale_x=0.25,position=(0,0))
    e1 = Sprite(model='square',color=color.green,position=(.25,0))
    e2 = Sprite(model='square',color=color.yellow,-.25,0))
    e3 = Sprite(model='square',color=color.red,0))

    def generation(self):
        x_position = randint(-3,4)
        self.e.position = (x_position,4,0)
        self.e1.position = (x_position + .25,0)
        self.e2.position = (x_position,3.75,0)
        self.e3.position = (x_position+.25,0)

    def movement(self):
        if self.dawn < 1:
            if held_keys['d'] and self.e3.x < 6.75:
                self.e.x += 0.25
                self.e1.x += 0.25
                self.e2.x += 0.25
                self.e3.x += 0.25
            if held_keys['a'] and self.e.x > -6.75:
                self.e.x -= 0.25
                self.e1.x -= 0.25
                self.e2.x -= 0.25
                self.e3.x -= 0.25
            self.e.y -= 0.25
            self.e1.y -= 0.25
            self.e2.y -= 0.25
            self.e3.y -= 0.25

cube = CubeSprite()
cube.generation()
cube2 = object.__new__(CubeSprite)
cube2.generation()

解决方法

您正在为您的位置使用类属性,这些属性由该类型的所有对象共享。这就是为什么您无法区分这两个精灵的原因。相反,让它们成为在构造函数中定义的正确实例属性,并将它们创建为普通对象:

class CubeSprite(object):

    def __init__(self):
        self.dawn = 0
        x_position = randint(-3,4)
        self.e = Sprite(model='quad',color=color.orange,scale_y=0.25,scale_x=0.25,position=(x_position,0))
        self.e1 = Sprite(model='quad',color=color.green,position=(x_position+.25,0))
        self.e2 = Sprite(model='quad',color=color.yellow,-.25,0))
        self.e3 = Sprite(model='quad',color=color.red,0))

cube = CubeSprite()
cube2 = CubeSprite()

您可能想阅读 Python 中面向对象设计的基础知识。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。