Mi primer programa en S60

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • Kpoyo
    Mandatory rape!
    • 16-05-2004
    • 8042

    #1

    Mi primer programa en S60

    Es0!

    Hoy le entre a meter mano al Python para Symbian S60 y es una maravilla lo facil que es.

    Venia con una demo de una bola, asi que lo quise adaptar para que use los acelerometros.

    Fijense, no necesita ninguna libreria adicional mas alla del PyS60

    (solo le comente los handlers a keyboard y los reemplaze por los accel)
    accelball.py

    Código PHP:
    # Copyright (c) 2005 Nokia Corporation
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #     http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    import appuifw
    from graphics import *
    import e32
    from key_codes import *
    from sensor import *
    
    class Keyboard(object):
        def __init__(self,onevent=lambda:None):
            self._keyboard_state={}
            self._downs={}
            self._onevent=onevent
        def handle_event(self,event):
            if event['type'] == appuifw.EEventKeyDown:
                code=event['scancode']
                if not self.is_down(code):
                    self._downs[code]=self._downs.get(code,0)+1
                self._keyboard_state[code]=1
            elif event['type'] == appuifw.EEventKeyUp:
                self._keyboard_state[event['scancode']]=0
            self._onevent()
        def is_down(self,scancode):
            return self._keyboard_state.get(scancode,0)
        def pressed(self,scancode):
            if self._downs.get(scancode,0):
                self._downs[scancode]-=1
                return True
            return False
    
        
    class Accelerometers:    
        def __init__(self):
            self.acc_data1=0
            self.acc_data2=0
            self.acc_data3=0
            self.__sensor = sensors()  
            self.sensorStr = 'AccSensor'
            self.movSensor = Sensor( self.__sensor[self.sensorStr]['id'],
                                     self.__sensor[self.sensorStr]['category'])                
            
        def start(self):
             
            self.movSensor.connect(self.handle_raw_data )
           
        def getAxis(self, axis):
            if(axis=='x'):
                return -self.acc_data2
            elif(axis=='y'):
                return -self.acc_data1
    
        def handle_raw_data(self, sensor):
            if sensor.has_key('data_1'):
                self.acc_data1=sensor['data_1']
                self.acc_data2=sensor['data_2']
                self.acc_data3=sensor['data_3']
        
    #keyboard=Keyboard()
    accels=Accelerometers()
    accels.start()
    
    appuifw.app.screen='full'
    img=None
    def handle_redraw(rect):
        if img:
            canvas.blit(img)
    #Lllamada a la funcion con el handle de teclado y el de redibujo de pantalla
    appuifw.app.body=canvas=appuifw.Canvas(
        #event_callback=keyboard.handle_event,
        redraw_callback=handle_redraw)
    
    img=Image.new(canvas.size)
    
    running=1
    def quit():
        global running
        running=0
    appuifw.app.exit_key_handler=quit
    
    location=[img.size[0]/2,img.size[1]/2]
    speed=[0.,0.]
    blobsize=16
    xs,ys=img.size[0]-blobsize,img.size[1]-blobsize
    gravity=0.03
    acceleration=0.05
    
    import time
    start_time=time.clock()
    n_frames=0
    # To speed things up, we prerender the text.
    labeltext=u'Use sensors to move ball'
    textrect=img.measure_text(labeltext, font='normal')[0]
    text_img=Image.new((textrect[2]-textrect[0],textrect[3]-textrect[1]))
    text_img.clear(0)
    text_img.text((-textrect[0],-textrect[1]),labeltext,fill=0xffffff,font='normal')
    
    while running:
        img.clear(0)
        img.blit(text_img, (0,0))
        img.point((location[0]+blobsize/2,location[1]+blobsize/2),
                  0x00ff00,width=blobsize)
        handle_redraw(())
        e32.ao_yield()
        speed[0]*=0.999
        speed[1]*=0.999
        #speed[1]+=gravity
        location[0]+=speed[0]
        location[1]+=speed[1]
        if location[0]>xs:
            location[0]=xs-(location[0]-xs)
            speed[0]=-0.80*speed[0]
            speed[1]=0.90*speed[1]
        if location[0]<0:
            location[0]=-location[0]
            speed[0]=-0.80*speed[0]
            speed[1]=0.90*speed[1]
        if location[1]>ys:
            location[1]=ys-(location[1]-ys)
            speed[0]=0.90*speed[0]
            speed[1]=-0.80*speed[1]
        if location[1]<0:
            location[1]=-location[1]
            speed[0]=0.90*speed[0]
            speed[1]=-0.80*speed[1]
        
        speed[0] += acceleration*(accels.getAxis('x')/200.0)
        speed[1] += acceleration*(accels.getAxis('y')/200.0)
    
     #   if keyboard.is_down(EScancodeLeftArrow):  speed[0] -= acceleration
      #  if keyboard.is_down(EScancodeRightArrow): speed[0] += acceleration
     #   if keyboard.is_down(EScancodeDownArrow):  speed[1] += acceleration
      #  if keyboard.is_down(EScancodeUpArrow):    speed[1] -= acceleration
      #  if keyboard.pressed(EScancodeHash):
      #      filename=u'e:\\screenshot.png'
      #      canvas.text((0,32),u'Saving screenshot to:',fill=0xffff00)
      #      canvas.text((0,48),filename,fill=0xffff00)
      #      img.save(filename)
    
        n_frames+=1
    end_time=time.clock()
    total=end_time-start_time
    
    print "%d frames, %f seconds, %f FPS, %f ms/frame."%(n_frames,total,
                                                         n_frames/total,
                                                         total/n_frames*1000.) 
    
    Editado por última vez por Kpoyo; 10-05-2009, 01:09 AM. Razón: gravedad, siempre me olvido de vos
  • Seba_mop
    His Infernal Majesty
    • 22-11-2004
    • 9760

    #2
    Hacete algo cool para los que tenemos S60 pero sin acelerómetros ni mierdas raras

    6670 FTW!

    Comentario

    • Kpoyo
      Mandatory rape!
      • 16-05-2004
      • 8042

      #3
      Este es solo el comienzo de la enfermedad que es programar

      mwheeheheh

      Comentario

      • MoaLaiSkirulais
        ^^(V)^^
        • 08-07-2003
        • 23268

        #4


        mañana lo leo bien

        Comentario

        • Kpoyo
          Mandatory rape!
          • 16-05-2004
          • 8042

          #5
          Si no lo pueden probar, hace algo asi

          "cumbia pelotita CHeTA" via YouTube
          ERROR: If you can see this, then YouTube is down or you don't have Flash installed.

          Comentario

          Trabajando...