Reputation: 974
Here is all the code in my program, but look at the get_click() method in the titleScreen() class. With testing, I concluded that the method does log my mouse clicks, but will not process the coordinates returned in the if statements to produce an outcome(in this case, just print which button was pressed). Why would it not work?
import pygame
from pygame import *
import math
import sys
#Presets for window
size=width,height=500,500
Ag=-9.80665
clock = pygame.time.Clock()
white=(255,255,255)
blue=(0,0,255)
red=(255,0,0)
gray_bgColor=(190,193,212)
#Initialise pygame Surface as screen
pygame.init()
pygame.font.init()
screen=pygame.display.set_mode(size)
pygame.display.set_caption("Flappy Kid")
#Game Presets
vY=0
xPos,yPos=200,100
score=0
on_title_screen=True
class graphics():
#Holds the methods for loading/displaying graphics
def load_images(self):
#Loads the background and sprite images
self.background_image=pygame.image.load("flappy_background.png").convert()
self.bird_image=pygame.image.load("flappy_sprite.jpg").convert()
screen.set_colorkey(white)
self.birdHitBox=self.bird_image.get_rect()
def show_background(self):
#blits the background
screen.blit(self.background_image,[0,0])
class titleScreen():
#Holds the methods for the title screen/menu
def title(self):
#Sets up the title
titleText="Flappy Game"
titlePos=(0,0)
currentFont=pygame.font.SysFont("arialms",30,bold=True,italic=True)
renderTitle=currentFont.render(titleText,1,blue,gray_bgColor)
self.titlex,self.titley=currentFont.size(titleText)
screen.blit(renderTitle,titlePos)
def start(self):
#Sets up the start Button
startText="Start Game"
self.startPos=(0,self.titley)
currentFont=pygame.font.SysFont("arialms",25,bold=False,italic=False)
renderStart=currentFont.render(startText,1,blue,gray_bgColor)
self.startx,self.starty=currentFont.size(startText)
screen.blit(renderStart,self.startPos)
def quit(self):
#Sets up the quit button
quitText="Quit"
self.quitPos=(0,self.starty+self.titley)
currentFont=pygame.font.SysFont("arialms",25,bold=False,italic=False)
renderQuit=currentFont.render(quitText,1,red,gray_bgColor)
self.quitx,self.quity=currentFont.size(quitText)
screen.blit(renderQuit,self.quitPos)
def get_click(self):
#Gets mouse click and processes outcomes
for event in pygame.event.get():
if event.type==pygame.MOUSEBUTTONDOWN:
x,y=pygame.mouse.get_pos()
#Tests for start:
if (x>self.startPos[0] and x<self.startx) and (y>self.startPos[1] and y<self.starty):
#on_title_screen=False
print("start")
#Tests for quit:
elif (x>self.quitPos[0] and x<self.quitx) and (y>self.quitPos[1] and y<self.quity):
#sys.exit()
print("quit")
titleC=titleScreen()
graphicsC=graphics()
def setupTitle():
#bundles all title_screen functions
titleC.title()
titleC.start()
titleC.quit()
def main():
graphicsC.load_images()
graphicsC.show_background()
setupTitle()
while True:
clock.tick(30)
if not on_title_screen:
for event in pygame.event.get():
if event.type==pygame.KEYDOWN:
if event.key==pygame.K_UP:
vY=-10
if y>height-50:
y=100
vY+=1
y+=vY
elif on_title_screen:
titleC.get_click()
pygame.display.flip()
main()
Upvotes: 0
Views: 59
Reputation: 3587
Your conditions don't meet to produce the output.
If I do this and click on the 'Start Game'
for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTONDOWN:
x, y = pygame.mouse.get_pos()
print x,y, self.startPos[0], self.startx, self.startPos[1], self.starty
I get '39 31 0 100 21 18'
x = 39
y = 31
self.startPos[0] = 0
self.startx = 100
self.startPos[1] = 21
self.starty = 18
The 'x' conditions is fine(as far as I can see). While the 'y' is messed
(x > self.startPos[0] and x < self.startx):
( 39 > 0 and 39 < 100):
(true and true) = True
(y > self.startPos[1] and y < self.starty):
(31 > 21 and 31 < 18):
(true and false) = False
'y'[31] can't be lesser than 18 AND greater than 21 so the condition is never met.
self.startPos1 should be 21 and self.starty should be 32.
You should be more carefull with your variables naming, they are misleading, also, pygame has a rectangle property that is ideal for this kind of behavior that you are aiming.
Upvotes: 1