我一直試圖讓這段代碼的Python代碼工作,但無濟於事。所以我試圖做的是讓我的按鈕有3個狀態:空閒,懸停和點擊。動畫按鈕
但是,由於某種原因圖像沒有改變。有人能告訴我我做錯了什麼嗎?
import pygame,sys,os
from pygame.locals import *
BG = "bg.jpg"
BUTTON1 = "buttonidle.png"
BUTTON2 = "buttonhov.png"
BUTTON3 = "buttonclick.png"
def load_image(name, colorkey=None):
fullname = os.path.join(name)
try:
image = pygame.image.load(fullname)
except pygame.error, message:
print "Can't load image:", name
raise SystemExit, message
image = image.convert()
if colorkey is not None:
if colorkey is -1:
colorkey = image.get_at((0,0))
image.set_colorkey(colorkey, RLEACCEL)
return image, image.get_rect()
class Button(pygame.sprite.Sprite):
global buttonsprite
def __init__(self):
pygame.sprite.Sprite.__init__(self)
if buttonsprite == 1:
self.image,self.rect = load_image(BUTTON1, -1)
screen = pygame.display.get_surface()
self.area = screen.get_rect()
self.rect.topleft = 190, 140
if buttonsprite == 2:
self.image,self.rect = load_image(BUTTON2, -1)
if buttonsprite == 3:
self.image,self.rect = load_image(BUTTON3, -1)
buttonsprite = 1
pygame.init()
screen = pygame.display.set_mode((500,300))
pygame.display.set_caption('Window')
background = pygame.Surface(screen.get_size())
background = background.convert()
background.fill((255,255,255))
screen.blit(background,(0,0))
pygame.display.flip()
button = Button()
allsprites = pygame.sprite.RenderPlain((button))
allsprites.update()
screen.blit(background,(0,0))
allsprites.draw(screen)
pygame.display.flip()
while True:
x,y = pygame.mouse.get_pos()
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if x >= 193 and x <= 315 and y >= 143 and y <= 171:
buttonsprite = 2
if event.type == MOUSEBUTTONDOWN:
buttonsprite = 3
else:
buttonsprite = 1
謝謝!
編輯:
好的,我得到了一些幫助,我添加了更新功能。但它似乎仍然不起作用。
import pygame,sys,os
from pygame import *
BG = "bg.jpg"
BUTTON1 = "buttonidle.png"
BUTTON2 = "buttonhov.png"
BUTTON3 = "buttonclick.png"
buttonsprite = 1
def load_image(name, colorkey=None):
fullname = os.path.join(name)
try:
image = pygame.image.load(fullname)
except pygame.error, message:
print "Can't load image:", name
raise SystemExit, message
image = image.convert()
if colorkey is not None:
if colorkey is -1:
colorkey = image.get_at((0,0))
image.set_colorkey(colorkey, RLEACCEL)
return image, image.get_rect()
class Button(pygame.sprite.Sprite):
global buttonsprite
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image,self.rect = load_image(BUTTON3, -1)
screen = pygame.display.get_surface()
self.area = screen.get_rect()
self.rect.topleft = 190, 140
def update(self):
if buttonsprite == 1:
self.image,self.rect = load_image(BUTTON1, -1)
if buttonsprite == 2:
self.image,self.rect = load_image(BUTTON2, -1)
if buttonsprite == 3:
self.image,self.rect = load_image(BUTTON3, -1)
pygame.init()
screen = pygame.display.set_mode((500,300))
pygame.display.set_caption('Window')
background = pygame.Surface(screen.get_size())
background = background.convert()
background.fill((255,255,255))
screen.blit(background,(0,0))
pygame.display.flip()
button = Button()
allsprites = pygame.sprite.RenderPlain((button))
allsprites.update()
screen.blit(background,(0,0))
allsprites.draw(screen)
pygame.display.flip()
while True:
x,y = pygame.mouse.get_pos()
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type == MOUSEBUTTONUP:
if x>=193 and x<=315 and y>=143 and y<=171:
buttonsprite = 2
button.update()
else:
buttonsprite = 1
button.update()
if event.type == MOUSEBUTTONDOWN:
if x>=193 and x<=315 and y>=143 and y<=171:
buttonsprite = 3
button.update()
else:
pass
謝謝,我想我取得了一些進展。但它仍然不起作用。我會在一秒鐘後發佈我的新代碼。 – 2012-07-11 00:46:46
我將我的新代碼添加到原始帖子中。 – 2012-07-11 00:50:45
你將不得不再次渲染圖像,類似於'allsprites = pygame.sprite.RenderPlain((button)); allsprites.update()' – TankorSmash 2012-07-11 01:35:18