如何解决动态生成新对象
在我的俄罗斯方块游戏中,如果原始立方体消失,我无法创建新立方体。当我使用这种方法时,我的第一个立方体消失了,而新的立方体出现了。我想用相似的方法制作两个相似的立方体
有我的代码:
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 举报,一经查实,本站将立刻删除。