【问题标题】:Dynamic generation new object动态生成新对象
【发布时间】:2021-09-07 02:02:25
【问题描述】:

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

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, 0))
    e1 = Sprite(model='square', color=color.green, scale_y=0.25, scale_x=0.25,  position=(.25, 0, 0))
    e2 = Sprite(model='square', color=color.yellow, scale_y=0.25, scale_x=0.25,  position=(0, -.25, 0))
    e3 = Sprite(model='square', color=color.red, scale_y=0.25, scale_x=0.25,  position=(.25, -.25, 0))

    def generation(self):
        x_position = randint(-3, 4)
        self.e.position = (x_position, 4, 0)
        self.e1.position = (x_position + .25, 4, 0)
        self.e2.position = (x_position, 3.75, 0)
        self.e3.position = (x_position+.25, 3.75, 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()

【问题讨论】:

    标签: oop game-engine 2d-games ursina


    【解决方案1】:

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

    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, 0))
            self.e1 = Sprite(model='quad', color=color.green, scale_y=0.25, scale_x=0.25,  position=(x_position+.25, 0, 0))
            self.e2 = Sprite(model='quad', color=color.yellow, scale_y=0.25, scale_x=0.25,  position=(x_position, -.25, 0))
            self.e3 = Sprite(model='quad', color=color.red, scale_y=0.25, scale_x=0.25,  position=(x_position+.25, -.25, 0))
    
    cube = CubeSprite()
    cube2 = CubeSprite()
    

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

    【讨论】:

      猜你喜欢
      • 2021-03-15
      • 2016-04-30
      • 2020-06-08
      • 1970-01-01
      • 1970-01-01
      • 2017-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多