1

pygame.rect.move()用来在实例化时将按钮移动到某个位置。然后从存在的对象列表中调用菜单按钮以及每帧需要调用的所有函数。按钮不动。

矩形应该完全适合按钮。

是我的使用pygame.rect.move()不正确吗?

这是课程:

class menuButton(mainMenu):
    def setpos(self):
        self.r = self.r.move(self.p)
    def __init__(self,i,e,s,p, ai, ao,sa):
        self.t = "Menu Button"
        self.i = pygame.image.load(i)
        self.r = self.i.get_rect()
        self.e = e
        self.ai = ai
        self.ao = ao
        self.p = p
        self.a = 0
        self.i.set_alpha(sa)
        pygame.transform.scale(self.i,s)
        objects.append(self)
        print "%s has been instantiated." % (self.t)
    def logic(self):
        pass
    def animations(self):
        if self.ai == "FADE_IN":
            if(self.i.get_alpha() < 255):
                self.i.set_alpha(self.i.get_alpha() + 1)

    def update(self):
        self.r = self.i.get_rect()
        r = True
        for obj in objects:
            if isinstance(self,type(obj)) == False:
                r = False
        if r == True:
            if self.a == 0:
                self.setpos()
                print self.r
            self.a += 1
            self.logic()
            self.animations()
            screen.blit(self.i,self.r)
            pygame.display.flip()

我没有在图像导入结束时使用 .convert() ,因为它会破坏图像。
我没有使用精灵,因为我想要更多的控制。
我还编写了测试程序,它似乎有效,并且我已经重写了主菜单按钮类 3 次。同样的问题。

4

1 回答 1

1

m 在图像导入结束时不使用 .convert() ,因为它会破坏图像。

以什么方式?您可能想要 alpha 版本http://www.pygame.org/docs/ref/surface.html#pygame.Surface.convert_alpha

我没有使用精灵,因为我想要更多的控制。

你可以派生自Sprite,然后你可以添加任何你想要的东西,但仍然使用sprite.Groups

关于名称的旁注,菜单将包含按钮。但是从菜单派生的按钮没有意义。

move()返回已移动的新矩形,move_ip()修改现有矩形。

或者您可以使用 rect 属性

def setpos(self):
    self.r.topleft = self.p

你在用这段代码做什么?

    r = True
    for obj in objects:
        if isinstance(self,type(obj)) == False:
            r = False
    if r == True:
        if self.a == 0:
            self.setpos()
            print self.r
        self.a += 1
于 2013-06-17T01:57:12.147 回答