I'm moving on to graphics, picking Pyglet and Cocos2D. This is my first program in Python with GUI.
Introducing:
- Two distinct high definition button sprites
- Satisfying high quality button pressing clicks
- Conveniently positioned counter
- Fully functional exit button
- Detailed error logging techniques to support software users
- Nice hand-picked background color
I would be very happy if you would correct my first steps to game programming.
""" Button presses counter. """
import cocos
import pyglet
class App (cocos.layer.ColorLayer):
""" A class holding an App layer, the only layer of the program. """
is_event_handler = True
def __init__(self):
""" Initializes the App layer. """
CENTER = 320, 240 # Center point constant. No >80 symbols and multilines.
super(App, self).__init__(135, 206, 235, 255) # skyblue background color
# Counter
self.text = cocos.text.Label('0',
anchor_x = 'center',
anchor_y = 'center',
position = CENTER)
self.add(self.text, z = 1)
# Button stuff
self.b_released = True # Button state
# Button sprites
try:
self.pressed = cocos.sprite.Sprite('pressed.png', position = CENTER)
self.released = cocos.sprite.Sprite('released.png', position = CENTER)
self.add(self.released) # When button state changes, sprites switch
except Exception:
with open('errlog.txt', 'a+') as f:
f.write("Problems w/ 'pressed.png' & 'released.png'. ")
f.write("Most likely do not exist or are corrupted.\n")
# Sounds
try:
self.p_sound = pyglet.resource.media('press.wav',streaming=False)
self.r_sound = pyglet.resource.media('release.wav',streaming=False)
except Exception:
with open('errlog.txt', 'a+') as f:
f.write("Problems w/ 'press.wav' & 'release.wav'. ")
f.write("Most likely do not exist or are corrupted.\n")
def update_counter(self):
""" Increases counter, positions it on center. """
self.text.element.text = str ( int(self.text.element.text)+1 )
self.text.element.position = 320, 240
def on_mouse_press(self, x, y, buttons, modifiers):
""" Changes state, sprite, plays sound when button is pressed. """
if x > 241 and x < 399 and y > 161 and y < 319 \
and self.b_released and buttons & pyglet.window.mouse.LEFT:
self.b_released = False
self.add(self.pressed)
self.remove(self.released)
self.p_sound.play()
self.update_counter()
def on_mouse_release(self, x, y, buttons, modifiers):
""" Changes state, sprite, plays sound when button is released. """
if not self.b_released:
self.b_released = True
self.add(self.released)
self.remove(self.pressed)
self.r_sound.play()
cocos.director.director.init()
cocos.director.director.run( cocos.scene.Scene( App() ) )
pressed.png
,released.png
,press.wav
,release.wav
. Shall I upload them? And the buttons have to be exactly 158x158. \$\endgroup\$and self.b_released and buttons & pyglet.window.mouse.LEFT:
line \$\endgroup\$