편집 : 더 긴 예제 코드를 추가했습니다.파이썬 파이 게임 - 우발적 인 연속 클릭을 피하십시오.
파이 게임에서 버튼 코딩에 문제가 있습니다. 저는 파이 게임 모듈의 초보자입니다.
기본적으로 목표는 포인트 앤 클릭으로 말하기 게임을 만드는 것입니다. 플레이어는 각 게임 루프의 두 가지 선택 사항, 즉 "왼쪽으로 이동"또는 "오른쪽으로 이동"과 함께 표시됩니다. 따라서 각 gameloop에 두 개의 버튼이 있으며, 모두 동일한 좌표에 있습니다. 내가 부주의 버튼을 클릭하면
import pygame
import os
import time
pygame.init()
display_width= 1280
display_height = 720
gameDisplay = pygame.display.set_mode((display_width, display_height))
clock = pygame.time.Clock()
def button(msg,x, y, w, h, ic, ac, action=None): #message, x y location, width, height, inactive and active colour
if action ==None:
pygame.display.update()
clock.tick(15)
mouse = pygame.mouse.get_pos()
click = pygame.mouse.get_pressed()
if x+w > mouse[0] > x and y+h > mouse[1] > y:
pygame.draw.rect(gameDisplay, ac,(x,y,w,h))
for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTONDOWN:
pygame.display.update()
clock.tick(15)
if action == "left1":
game_loop("loop1-1.png",0,0,"left2","left2","","")
else:
pygame.draw.rect(gameDisplay, ic,(x,y,w,h))
smallText = pygame.font.SysFont('timesnewroman',20)
textSurf, textRect = text_objects(msg, smallText, silver)
textRect.center = ((x+(w/2)), (y+(h/2)))
gameDisplay.blit(textSurf, textRect)
def game_loop(pic,width,heigth,act1,act2,left,right):
intro = True
while intro:
for event in pygame.event.get():
print(event)
if event.type == pygame.QUIT:
pygame.quit()
quit()
gameDisplay.fill(white)
gameDisplay.blit(get_image(pic), (0, 0)) #MAIN MENU PIC
button(left,440,450,width,heigth, dark_gray, gray, action=act1)#start nupp
button(right,740,450,width,heigth, dark_gray, gray, action=act2)#exit nupp
pygame.display.update()
clock.tick(15)
문제는 내가 할 수있는 나는 의도적으로 빠르게 마우스 왼쪽 버튼을 클릭하지 않으면 의미가 발생 : 여기
는 기능입니다. 일단 game_loop1이 호출되고 좀 더 길게 클릭하면 프로그램은이 game_loop1에서 첫 번째 클릭을 다시 읽고 다음 game_loop을 실행 한 다음 다음을 실행합니다. 이는 플레이어가 실수로 gameloops를 건너 뛸 수 있음을 의미합니다.첫 번째 클릭 후 프로그램을 지연시키는 방법이 있습니까? 또는 함수에 keyup을 포함하는 방법 일 수 있습니다. 따라서 다음 gameloop에서 클릭 수가 계산되지 않습니다.
감사합니다.
안녕하세요! 코드를 [최소의 실행 가능한 예제] (https://stackoverflow.com/help/mcve)로 바꿀 수 있습니까? 그러면 코드가 어떻게 작동하는지, 문제가있는 곳을 파악하고 문제를 해결하는 방법에 대한 정보를 쉽게 얻을 수 있습니다. – skrx
주된 문제는'pygame.mouse.get_pressed()'입니다. 마우스 버튼을 누르고 있는지 확인하지만 버튼이 한 번 클릭되었는지 만 알고 싶습니다. 즉, pygame.event.get()에서 이벤트에 대한 이벤트 루프'를 사용하고'if event.type == pygame.MOUSEBUTTONDOWN'을 확인해야합니다. 나는 최소한의 예를 준비하려고 노력할 것이다. 편집 : 나는 최근 몇 가지 예제를 게시했습니다 [여기] (https://stackoverflow.com/a/47664205/6220679). – skrx
그런데 어디에서 그 코드를 찾았습니까? [링크 된 질문] (https://stackoverflow.com/q/47639826/6220679)과 거의 같습니다. 아마이 질문을 복제물로 표시해야합니다. – skrx