Найти - Пользователи
Полная версия: Первый опыт использования классов
Начало » Mobile Python » Первый опыт использования классов
1 2
Itsmyname
Добрый день :) Решил приняться за классы. Вроде все правильно, но вот при запуске вылетает.. Подскажите, где здесь ошибки. Питон 1.4.5, E50
#-*-coding:utf-8-*-
import appuifw as a
import graphics as g
import e32
import codecs

class Main:

def redraw(self,rect=None):
self.canvas.blit(self.back)
self.canvas.blit((-5,-5), self.sea)
self.canvas.blit((-self.cur_x, -self.cur_y), self.cursor, mask=self.mask)

def __init__(self):
self.canvas=a.Canvas(redraw_callback=self.redraw)
a.app.body=self.canvas
a.app.screen='full'
self.path='c:\\tmp'
self.state=1
#self.lang()
#self.load()
self.init_var()
self.init_images()

def init_var(self):
self.def_x=240
self.def_y=320
self.real_x,self.real_y=self.canvas.size()
self.draw_x=20
self.draw_y=20
self.len=20
self.cur_pos_x=0
self.cur_pos_y=0
self.cur_x=26
self.cur_y=26
self.array=[]
self.var_ship=3
self.index=0

def init_images(self):
self.back=g.Image.open(self.path+'\\images\\back.jpg')
self.sea=g.Image.open(self.path+'\\images\\sea.jpg')
self.mask=g.Image.new((20,20), fill=0x808080)
self.cursor==g.Image.new((20,20), fill=0xffff00)
self.ship[0]=g.Image.new((20,20), fill=0xff0000)
self.ship[1]=g.Image.new((20,41), fill=0xff0000)
self.ship[2]=g.Image.new((20,62), fill=0xff0000)
self.ship[3]=g.Image.new((20,84), fill=0xff0000)


def redraw_cur(self):
self.canvas.blit((-self.cur_x, -self.cur_y), self.cursor, mask=self.mask)

def load():
pass

def lang(self):
file=codecs.open(self.path+'\\lang.ini','r','utf-8')
tmp=file.read()
self.lang=tmp.split('\r\n')
return self.lang

def press(self,value):
if value=='right':
if self.cur_pos_x<10:
self.cur_pos_x+=1
self.cur_x+=((self.len + 1)*self.cur_pos_x)
self.lredraw_cur()

if value=='left':
if self.cur_pos_x>0:
self.cur_pos_x-=1
self.cur_x-=((self.len + 1)*self.cur_pos_x)
self.lredraw_cur()

if value=='down':
if self.cur_pos_y<10:
self.cur_pos_y+=1
self.cur_y+=((self.len + 1)*self.cur_pos_y)
self.lredraw_cur()

if value=='up':
if self.cur_pos_y>0:
self.cur_pos_y-=1
self.cur_y-=((self.len + 1)*self.cur_pos_y)
self.lredraw_cur()

if value=='5':
if self.state==0:
pass
if self.state==1:
self.array[self.index][0]=self.cur_pos_x
self.array[self.index][1]=self.cur_pos_y
self.sea.blit((-self.cur_x,-self.cur_y), self.ship[self.var_ship])
# if self.state==2:


f=Main()

self.canvas.bind(15, lambda:f.press('right'))
self.canvas.bind(14, lambda:f.press('left'))
self.canvas.bind(17, lambda:f.press('down'))
self.canvas.bind(16, lambda:f.press('up'))
self.canvas.bind(55, lambda:f.press('5'))
lock=e32.Ao_lock()
a.app.exit_key_handler=lambda:lock.signal()
lock.wait()
Zubchick
что вылетает то?.. неужели думаете кто-то будет это копировать и запускать? +)
Itsmyname
Не, может кто нить заметит чего нить :) Вообще закрывается сам интерпретатор, никакой консоли с ошибками…
Zubchick
Мама… я тут взглянул на код…
Вобщем, ошибки начинаются сразу после слова мейн.
Itsmyname
А поподробнее?
igor.kaist
Сделайте сначала init_img и init_vars, а потом указывайте canvas с redraw_callback'ом
У вас вызывается redraw для прорисовки экрана (после app.screen='full' экран перерисовывается принудительно), а переменные еще не определены.
KaBaSya
f=Main()
self.canvas.bind(15, lambda:f.press('right'))

# А должно быть
f=Main()
f.canvas.bind(15, lambda:f.press('right'))
Itsmyname
Спасибо за советы. Исправил по советам, нашел еще несколько глупых ошибок…исправил следующие части:
  def __init__(self):
self.path='c:\\tmp'
self.state=1
#menu()
#a.app.menu=self.menu
#self.load()
self.init_var()
self.init_images()
self.canvas=a.Canvas(redraw_callback=self.redraw)
a.app.body=self.canvas
a.app.screen='full'
  def init_images(self):
self.back=g.Image.open(self.path+'\\images\\back.jpg')
self.sea=g.Image.open(self.path+'\\images\\sea.jpg')
self.mask=g.Image.new((20,20), 'L')
self.mask.clear((0x808080))
self.cursor=g.Image.new((20,20))
self.cursor.clear((0xff0000))
self.ship=range(4)
self.ship[0]=g.Image.new((20,20))
self.ship[0].clear((0xff0000))
self.ship[1]=g.Image.new((20,41))
self.ship[1].clear((0xff0000))
self.ship[2]=g.Image.new((20,62))
self.ship[2].clear((0xff0000))
self.ship[3]=g.Image.new((20,84))
self.ship[3].clear((0xff0000))
Теперь вылетает на стадии прорисовки канваса..))(Еще до того момента, когда он становится на весь экран, то есть область как при appuifw.app.screen='normal') ><
Itsmyname
PS Заметил, что если в функции redraw() оставить только самую первую строчку, и не делать на весь экран(a.app.screen='full'), то не вылетает. В остальных же случаях крах
igor.kaist
Так попробуйте сначала app.screen='full' а потом уже объявлять canvas.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB