You Are Here:

Community: Wiki

This page was last modified on 11 July 2009, at 20:40.

Como fazer animações sem bloqueio usando sprites

From Forum Nokia Wiki


ID Creation date March 11, 2009
Platform S60 1st Edition, S60 2nd Edition, S60 3rd Edition Tested on devices Nokia N95
Category Python Subcategory


Keywords (APIs, classes, methods, functions): Animação, sprite

Aqui está um exemplo simples de como fazer animações usando sprites no PyS60. Este exemplo não bloqueia a thread principal porque ele usa a função assíncrona e32.ao_sleep.

Nesse exemplo, nós usaremos a imagem sequencial do peixe mostrada abaixo:

Image:Sprite.GIF

Pode-se usar qualquer imagem sequencial nesse exemplo. Basta alterar as constantes IMAGE_LOCATION, FRAME_WIDTH, FRAME_HEIGHT, SEQUENCE, POS_X, POS_Y e DELAY

As constantes FRAME_WIDTH e FRAME_HEIGHT são a largura e a altura de cada quadro da imagem, como mostrado a seguir.

Image:Fish.png

A constante SEQUENCE é uma lista de inteiros que determna a sequência de aparecimento de cada quadro como mostrado na imagem acima. POS_X e POS_Y são oa posição em que a animação aparecerá na tela.

import appuifw, graphics, e32, sysinfo
 
IMAGE_LOCATION = "c:\\python\\sprite.GIF"
FRAME_WIDTH = 35
FRAME_HEIGHT = 33
SEQUENCE = [0, 1, 2, 3, 2, 1]
POS_X = 50
POS_Y = 50
DELAY = 0.2
 
def handle_redraw(rect):
if img:
canvas.blit(img)
 
def quit():
running = 0
lock.signal()
 
lock = e32.Ao_lock() #Cria um lock
display_size = sysinfo.display_pixels() #Obtem o tamanho da tela
appuifw.app.screen = 'full' #Configura a aplicação para fullscreen
img = graphics.Image.new(display_size) #Cria uma imagem de base
canvas = appuifw.Canvas(redraw_callback=handle_redraw) #cria um canvas
appuifw.app.body = canvas #Atribui o canvas como sendo o corpo da aplicação
sprite_image = graphics.Image.open(IMAGE_LOCATION) #Carrega a imagem sequencial
appuifw.app.exit_key_handler = quit #Configura a função de saída
 
running = 1
count = 0
 
def animation():
global count
img.clear(0)
img.blit(sprite_image,
target = (POS_X, POS_Y),
source = ((SEQUENCE[count]*FRAME_WIDTH,0),
(FRAME_WIDTH*(1+SEQUENCE[count]), FRAME_HEIGHT)))
handle_redraw(())
 
if count < len(SEQUENCE) - 1:
count += 1
else:
count = 0
 
if running:
#Chama a função de animação depois de DELAY segundos sem bloquear
e32.ao_sleep(DELAY, animation)
 
animation()
lock.wait()

Related Wiki Articles

No related wiki articles found

Rate This

 
Bookmark this page: DeliciousDiggFacebookGoogleYahooStumbleUponRedditDiigoTechnocratiTwitter  Share this page Share this page Print this Page Print this page Invite a friend Invite a friend
京ICP备05048969号    Email Newsletters Press Terms & Conditions Privacy Policy Sitemap Contact Us © 2009 Nokia 
RDF Facets: qdcZidentifierQSxhttpE3aE2fE2fwikiE2eforumE2enokiaE2ecomE2findeE78E2ephpE2fTalkE3aE4cargeE5fscreenE5fsaverX qdcZtypeQUqfnZE45E78cludedFromGeneralE4cistingsQ qdcZtypeQUqfntypeZCommunityContentQ qdcZtypeQUqfntypeZE52esourceQ qdcZtypeQUqfntypeZWebpageQ qdcZtypeQUqfntypeZWikiContentQ qdcZtypeQUqmarsZManagedE52esourceQ qdcZtypeQUqwebZInformationE52esourceQ qdcZtypeQUqwebZPageQ qdcZtypeQUqwebZE52esourceQ qdcZtypeQUqrdfsZE52esourceQ qfnZtypeQUqfntypeZCommunityContentQ qfnZtypeQUqfntypeZE52esourceQ qfnZtypeQUqfntypeZWebpageQ qfnZtypeQUqfntypeZWikiContentQ qmarsZlanguageQUxhttpE3aE2fE2fswE2enokiaE2ecomE2flanguageE2d1E2fenX qrdfZtypeQUqfnZE45E78cludedFromGeneralE4cistingsQ qrdfZtypeQUqfntypeZCommunityContentQ qrdfZtypeQUqfntypeZE52esourceQ qrdfZtypeQUqfntypeZWebpageQ qrdfZtypeQUqfntypeZWikiContentQ qrdfZtypeQUqmarsZManagedE52esourceQ qrdfZtypeQUqwebZInformationE52esourceQ qrdfZtypeQUqwebZPageQ qrdfZtypeQUqwebZE52esourceQ qrdfZtypeQUqrdfsZE52esourceQ