×
Namespaces

Variants
Actions

Archived:Criando animações em PySymbian

From Nokia Developer Wiki
Jump to: navigation, search

Archived.pngAquivado: Este artigo foi arquivado, pois o conteúdo não é mais considerado relevante para se criar soluções comerciais atuais. Se você achar que este artigo ainda é importante, inclua o template {{ForArchiveReview|escreva a sua justificativa}}.

Acredita-se que este artigo ainda seja válido no contexto original (quando ele foi escrito)


Article Metadata

Compatibilidade
Plataforma(s): Python for Symbian

Artigo
Criado por felipebzr em 24 Jun 2008
Última alteração feita por hamishwillee em 07 May 2013

O exemplo a seguir serve apenas como base para o desenvolvimento da classe Sprite existente no MIDP 2.0 do Java ME. A criação de um framework para games ajudaria a simplificar o desenvolvimento de aplicações com o Python para Symbian.

O Python para Symbian é uma linguagem robusta, simples e bastante poderosa. Apesar de não prover API's nativas para desenvolvimento de games, como as existentes no PyGame, podemos facilmente criar algumas destas classes.

Primeiros passos

Se você está começando a usar Python para Symbian, aconselho a leitura prévia de materiais de introdução.

Exemplo

Caso este seja seu primeiro contato com o Python para Symbian, faça o download do runtime e do python script shell.

Após a instalação, crie um diretório com o nome Python no seu cartão de memória e copie o código abaixo em um novo arquivo com a extensão .py

A imagem também deve ser copiada para a pasta Python recém-criada no cartão de memória.

Tiled owner flatten.png

import appuifw
import e32
from graphics import Image
 
## Sprite
# Similar a classe Sprite do pacote game disponível na MIDP 2.0
# Este trecho de código foi criado em apenas 30 minutos, e nao foi exaustivamente testado
# podendo existir diversas falhas em sua implementacao, qualquer melhoria é bem vinda.
class Sprite:
## Construtor da classe
# @param self The object pointer.
def __init__( self, aImg, aFrWidth, aFrHeight ):
self._iImg = aImg
self._iFrWidth = aFrWidth
self._iFrHeight = aFrHeight
self._iCurrentFrame = 1
self._iIndFrame = 0
self._iWidth, self._iHeight = self._iImg.size
self._iMaxWidthFrames = self._iWidth / self._iFrWidth
self._iMaxHeightFrames = self._iHeight / self._iFrHeight
self._iFrameSequence = [0]
self._iPosX = 0
self._iPosY = 0
# end __init__
 
## Seta a sequencia de frames
# @param self The object pointer.
# @param aSeq Sequencia dos frames.
def set_frame_sequence( self, aSeq ):
self._iIndFrame = 0
self._iFrameSequence = aSeq
self._iCurrentFrame = self._iFrameSequence[self._iIndFrame]
# end set_frame_sequence
 
## Seta o posicionamento do objeto na tela
# @param self The object pointer.
# @param aPos Posicionamento do objeto.
def set_position( self, aPos ):
self._iPosX, self._iPosY = aPos
# end set_position
 
## Seta o próximo frame
# @param self The object pointer.
def next_frame( self ):
self._iIndFrame += 1
if self._iIndFrame == len(self._iFrameSequence):
self._iIndFrame = 0
self._iCurrentFrame = self._iFrameSequence[self._iIndFrame]
# end next_frame
 
## Seta o frame atual
# @param self The object pointer.
# @param aFrame frame.
def set_frame( self, aFrame ):
self._iCurrentFrame = self._iFrameSequence[aFrame]
# end set_frame
 
## Desenha o objeto na tela de acordo com a posicao e o frame atual
# @param self The object pointer.
# @param aGraphics Canvas.
def paint ( self, aGraphics ):
aGraphics.blit(self._iImg, target=(self._iPosX, self._iPosY), \
source=((self._iCurrentFrame-1) * self._iFrWidth, 0, self._iCurrentFrame * self._iFrWidth, self._iCurrentFrame * self._iFrHeight))
# end paint
 
## SpriteAnimation
# Responsavel por criar os objetos na tela
class SpriteAnimation:
## Construtor da classe
# @param self The object pointer.
def __init__( self ):
# Define o corpo da aplicação
self._iCanvas = appuifw.Canvas()
appuifw.body = self._iCanvas
 
# altura e largura do canvas
self._cWidth, self._cHeight = self._iCanvas.size
 
# Sprite
self._iImgPlayer = Image.open("e:\\Python\\tiled_owner_flatten.png")
self._iPlayer = Sprite(self._iImgPlayer, 60, 70)
self._iPlayer.set_frame_sequence([5, 6, 7])
self._iPlayer.set_position((self._cWidth/2 - 30, self._cHeight/2 - 35))
 
# define o evento de saída da aplicação
appuifw.app.exit_key_handler = self.quit
 
# seta o status da aplicacao
self._iRunning = True
 
# define um background branco
self._iCanvas.rectangle((0, 0, 240, 320), outline = 0xFFFFFF, width=240)
 
# define a resolucao da tela
appuifw.app.screen = 'full' # (full, large, normal)
 
# cria um loop principal da aplicação
self.paint()
# end __init__
 
## Redesenha os objetos na tela
# @param self The object pointer.
def paint( self ):
while self._iRunning:
self._iCanvas.clear()
self._iPlayer.paint( self._iCanvas )
self._iPlayer.next_frame()
 
# Processa eventos pendentes
e32.ao_yield()
 
# taxa de atualização
e32.ao_sleep(0.1)
# end paint
 
## Manipula a saída do aplicativo
# @param self The object pointer.
def quit( self ):
self._iRunning = 0
# end quit
 
animation = SpriteAnimation()

Autor

FelipeAndrade -- 04:35, 24 June 2008 (EEST)

This page was last modified on 7 May 2013, at 11:22.
56 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×