我正在创建一个创建塔的小游戏。
塔架有两个部件,底座和喷枪。为了做到这一点,我试图将self.x
的值传递给子类的__init__
函数。一旦我找到解决方案,我将进一步添加update()
功能。
这是我的代码。 (格式不正确,不完整......抱歉!)
import pygame
from math import atan2
screen = pygame.display.set_mode((800, 800))
pygame.display.set_caption('Foongus v0.1')
pygame.init()
class home_base:
def __init__(self, x, y):
class base:
def __init__(self, x, y):
self.image = pygame.image.load('base.png')
screen.blit(self.image, (x, y))
class gun:
def __init__(self, x, y):
self.image = pygame.image.load('gun.png')
screen.blit(self.image, (x, y))
home = home_base(300, 300)
while True:
screen.fill((0,0,0))
pygame.display.update()
答案 0 :(得分:0)
你通常不会在另一个类的__init__
方法中定义一个类。相反,我会沿着这些方向做点什么:
class A(object):
def __init__(self, instance_classB):
# here self is an instance of A and instance_classB an instance of B
pass
class B(object):
def __init__(self):
# self is the newly created instance of B
self._instance_classA = A(self)
# create an instance of B - calls B.__init__ on the new instance
b = B()
通过这种方式,您可以在B
中引用类A
的实例,其中类self._instance_classA
的每个实例都有一个向后引用到类A
的实例,它属于传递给构造函数。
答案 1 :(得分:0)
以下代码可以帮助您指导您应该前进的方向:
import math
import pygame
def main():
screen = pygame.display.set_mode((800, 800))
pygame.display.set_caption('Foondus v0.1')
pygame.init()
home = HomeBase(300, 300, screen)
while True:
screen.fill((0, 0, 0))
pygame.display.update()
class HomeBase:
def __init__(self, x, y, screen):
self.x, self.y, self.screen = x, y, screen
self.base_image = pygame.image.load('base.png')
self.gun_image = pygame.image.load('gun.png')
self.screen.blit(self.base_image, (self.x, self.y))
self.screen.blit(self.gun_image, (self.x, self.y))
if __name__ == '__main__':
main()