pygame:在屏幕上绘图之前将文本绘制到Surface

时间:2014-02-08 23:21:56

标签: python pygame

已经有很多这样的问题,但我无法弄清楚错误是什么。复杂的问题是代码分散在一个类上。我试图创建一个滚动面板。这是类槽,显示一些短语,并作为链接列表,以允许增长(并希望紧凑的代码)

代码: 变量:the_game:模块pygame的实例,font:模块pygame.font的实例,短语:被推送的字符串,self.bitmap:要绘制到屏幕的插槽的表面对象,num:表示插槽编号的数字,因为它们应该是按顺序。

class slot(object):
    def __init__(self,x,y,num,dimx,dimy,the_game,font):
        ...
        self.wordnum = convertnum(num)+". "
        self.phrase=""
        self.bitmap = the_game.Surface((dimx,dimy))
        self.updatesprite(the_game,font)

函数updatesprite用于清除和重新插入更改时插槽应该保留的任何短语:

    def updatesprite(self,the_game,font):
        self.bitmap.fill((240,240,240))
        phrase = self.wordnum
        if(self.has_phrase==True):
            phrase+=self.phrase
        text = font.render(phrase,1,(0,0,255))
        the_game.Surface.blit(text,self.bitmap,[self.x+2, self.y+2])
    ...

用于将一个短语或句子移回到下一个插槽中,当另一个插槽被推送时#34;在前一个插槽

    def mypush(self,num,phrase,the_game,font):
        if (num > self.num):
            if (self.has_next==False):
                self.addmore(num-self.num,the_game,font)
            self.next.mypush(num,phrase,the_game,font)
            self.updatesprite(the_game,font)
        elif (num == self.num):
            if (self.has_phrase==True):
                self.mypush(self.num+1,self.phrase,the_game,font)
            else:
                self.has_phrase=True
            self.phrase=phrase
            self.updatesprite(the_game,font)

用于设置插槽短语的功能:

    def setphrase(self,phrase,realx,realy,virty,realdim,mousex,mousey,the_game,font):
        ...
        if (self.has_phrase==True):
            self.mypush(self.num+1,self.phrase,the_game,font)                
            self.has_phrase=True
        self.phrase=phrase
        self.updatesprite(the_game,font)

然后绘制到屏幕的方法:

    def mydraw(self,the_game,scrn,realx,realy,virty,realdim):
        ...
        holder = self.bitmap.subsurface(0,self.e_y-virty,self.dim_x,self.dim_y-(self.e_y-virty))
        scrn.blit(holder,[self.x,0])
        if(self.has_next==True):
            self.next.mydraw(the_game,scrn,realx,realy,virty,realdim)

缩写的代码用于确定用户是否点击了一个插槽,从滚动坐标确定屏幕坐标等。

这样写的原因是因为:a)我希望一个面板可能有相当多的插槽。我想到绘制一个大位图并抓住我需要的东西并不聪明或可扩展。 b)可删除单个插槽

我可以举例说明,但不是这项工作。我可以看到实际的位图:self.bitmap,被绘制到屏幕但没有字符串。 IDK最近怎么样?

1 个答案:

答案 0 :(得分:0)

更新了updatesprite方法:

def updatesprite(self,the_game,font):
    self.bitmap.fill((240,240,240))
    phrase = self.wordnum
    if(self.has_phrase==True):
        phrase+=self.phrase
    text = font.render(phrase,1,(0,0,255))
    **self.bitmap.blit(text,[1, 1])** #compare to original

HEH