[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[pygame] Re: more on joysticks
- To: pygame-users@xxxxxxxx
- Subject: [pygame] Re: more on joysticks
- From: altern <altern2@xxxxxxxxx>
- Date: Wed, 14 Sep 2005 17:11:31 +0200
- Delivered-to: archiver@seul.org
- Delivered-to: pygame-users-outgoing@seul.org
- Delivered-to: pygame-users@seul.org
- Delivery-date: Wed, 14 Sep 2005 11:11:17 -0400
- Domainkey-signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:user-agent:x-accept-language:mime-version:to:subject:references:in-reply-to:content-type:content-transfer-encoding; b=LQ3chQ+2DPeV9bwc8Rb4/ATd9WxTSsiNM9qi5Fc9QUIY44631WqmHuwDhVam4WkCwCMEQQCSTuBnWRh1K0qIfy/yFS6G2b319CX9QYuJpqThZS/ThCsOk0M02s3ehowcfcym0q/MGmHnG2X0WNCV0A8Pl1WusIVMrw90Ie38mdg=
- In-reply-to: <43280762.8060003@gmail.com>
- References: <43280762.8060003@gmail.com>
- Reply-to: pygame-users@xxxxxxxx
- Sender: owner-pygame-users@xxxxxxxx
- User-agent: Mozilla Thunderbird 1.0.6 (Macintosh/20050716)
hi again
sorry, my previous code was rubbish. I think this is better.
#######
# joystick example
#JOYAXISMOTION joy, axis, value
#JOYBALLMOTION joy, ball, rel
#JOYHATMOTION joy, hat, value
#JOYBUTTONUP joy, button
#JOYBUTTONDOWN joy, button
# from Peter Shinners :
# A basic joystick generally has two axis and a few buttons. Axis 0 is
# always left/right and axis 1 is up/down. There are also advanced flight
# simulator joysticks which have a lot more gadgets on them. First, the
# big joysticks will have more axis on them. Things like twist, throttle
# control, and even foot rudders will be counted as additional axis. The
# "hats" are miniature joysticks on the joystick, They are usually
# controlled by the thumb. Lastly, there are also "balls" on the joystick
# which are like little trackballs on the joystick. These work sort of
# like mice, but controlled with one finger. Also note that little
# gamepads will still use the first two axis for the direction pad, even
# though it's not really an analog axis. This is good since it keeps the
# analog joysticks and gamepads somewhat similar for software.
import pygame
from pygame import locals
jlist = [] # global joystick list
def init():
pygame.init()
pygame.joystick.init() # init main joystick device system
try:
for n in range(pygame.joystick.get_count()): #
stick = pygame.joystick.Joystick(n)
jlist.append(stick) # create a joystick instance
stick.init() # init instance
# report joystick charateristics #
print '-'*20
print 'Enabled joystick: ' + stick.get_name()
print 'it has the following devices :'
print '--> buttons : '+ str(stick.get_numbuttons())
print '--> balls : '+ str(stick.get_numballs())
print '--> axes : '+ str(stick.get_numaxes())
print '--> hats : '+ str(stick.get_numhats())
print '-'*20
except pygame.error:
print 'pygame.error, no joystick found.'
def main():
init() # init pygame and joystick system
while 1: # endless loop
for e in pygame.event.get(): # iterate over event stack
if e.type == pygame.locals.JOYAXISMOTION: # 7
for j in jlist:
for n in range(j.get_numaxes()):
print 'moved axe num '+str(n)+' : ' + str(j.get_axis(n))
print '-'*10 # separation
elif e.type == pygame.locals.JOYBALLMOTION: # 8
for j in jlist:
for n in range(j.get_numballs()):
print 'moved ball num '+str(n)+' : '+ str(j.get_ball(n))
print '-'*10 # separation
elif e.type == pygame.locals.JOYHATMOTION: # 9
for j in jlist:
for n in range(j.get_numhats()):
print 'moved hat num '+str(n)+' : '+ str(j.get_hat(n))
print '-'*10 # separation
elif e.type == pygame.locals.JOYBUTTONDOWN: # 10
for j in jlist:
for n in range(j.get_numbuttons()):
if j.get_button(n) : # if this is down
print 'down button num '+str(n)+' : '+ str(j.get_button(n))
print '-'*10 # separation
elif e.type == pygame.locals.JOYBUTTONUP: # 11
for j in jlist:
for n in range(j.get_numbuttons()):
print 'up button num '+str(n)+' : '+ str(j.get_button(n))
print '-'*10 # separation
if __name__ == '__main__': main()
############
altern(e)k dio:
hi again
The game pad got me confused so actually i was getting buttomup and down
events plus axes movements, despite of what i said in previous emails.
What I dont get is ball motion and hat motion. I am not sure why i dont
get this, neither of the pads i am using seems to have any effect when i
press the left hand controllers.
I put together the code below to test the basic functionality if the
joysticks, added some comments from peter, maybe someone finds it
useful. But i am not sure it is correct.
After trying with couple of different pads I realised that actually they
are all slightly different, so the buttom 1 and 2 are actually different
in both pads i am using. I was wondering how does people usually go
about this. If i was doing a space invaders for example each pad would
move the spaceship into a different direction pressing the 'same' buttom
(actually not the same, but on the same position in the pad). It looks
like a setup screen if needed so that the user can test if the game or
application if setup to run properly to his/her pad.
below the code of the testing example.
#########
# joystick example
#JOYAXISMOTION joy, axis, value
#JOYBALLMOTION joy, ball, rel
#JOYHATMOTION joy, hat, value
#JOYBUTTONUP joy, button
#JOYBUTTONDOWN joy, button
# from Peter Shinners :
# A basic joystick generally has two axis and a few buttons. Axis 0 is
# always left/right and axis 1 is up/down. There are also advanced flight
# simulator joysticks which have a lot more gadgets on them. First, the
# big joysticks will have more axis on them. Things like twist, throttle
# control, and even foot rudders will be counted as additional axis. The
# "hats" are miniature joysticks on the joystick, They are usually
# controlled by the thumb. Lastly, there are also "balls" on the joystick
# which are like little trackballs on the joystick. These work sort of
# like mice, but controlled with one finger. Also note that little
# gamepads will still use the first two axis for the direction pad, even
# though it's not really an analog axis. This is good since it keeps the
# analog joysticks and gamepads somewhat similar for software.
import pygame
from pygame import locals
jlist = [] # global joystick list
def init():
pygame.init()
pygame.joystick.init() # init main joystick device system
try:
for n in range(pygame.joystick.get_count()): #
stick = pygame.joystick.Joystick(n)
jlist.append(stick) # create a joystick instance
stick.init() # init instance
print 'Enabled joystick: ' + stick.get_name()
except pygame.error:
print 'pygame.error, no joystick found.'
def main():
init() # init joystick system
while 1: # endless loop
for e in pygame.event.get(): # iterate over event stack
if e.type == pygame.locals.JOYAXISMOTION: # 7
for j in jlist:
for n in range(j.get_numaxes()):
print 'axe num : ' + str(j.get_axis(n))
elif e.type == pygame.locals.JOYBALLMOTION: # 8
for j in jlist:
for n in range(j.get_numballs()):
if j.get_button(n) :
print 'ball num : '+ str(n)
elif e.type == pygame.locals.JOYHATMOTION: # 9
for j in jlist:
for n in range(j.get_numhats()):
if j.get_button(n) :
print 'hat num : '+ str(n)
elif e.type == pygame.locals.JOYBUTTONDOWN: # 10
for j in jlist:
for n in range(j.get_numbuttons()):
if j.get_button(n) :
print 'button num : '+ str(n)
elif e.type == pygame.locals.JOYBUTTONUP: # 11
for j in jlist:
for n in range(j.get_numbuttons()):
if j.get_button(n) :
print 'button num : '+ str(n)
if __name__ == '__main__': main()
#####
--
altern