Crossin的编程教室

标题: pygame键盘输入无效问题 [打印本页]

作者: 林夕_信仰    时间: 2013-9-5 12:24
标题: pygame键盘输入无效问题
在学一个pygame 的时候,遇到了按键没响应的问题(没报错),希望帮忙解决下,打算学完这个小游戏后分享给大家@crossin先生,pygame1.91;python2.7;win32;
#1 - Import library
import pygame
from pygame.locals import *

#2 - Initialize the game
pygame.init()
width, height = 640, 480
screen = pygame.display.set_mode((width, height))
keys = [False, False, False, False]
playerpos = [100, 100]

#3 - Load images
player = pygame.image.load('resources/images/dude.png')
grass = pygame.image.load('resources/images/grass.png')
castle = pygame.image.load('resources/images/castle.png')

#4 - keep looping through
while 1:
    #5 - clear the screen before drawing it again
    screen.fill(0)

    #6 - draw the screen elements
    for x in range(width/grass.get_width()+1):
        for y in range(height/grass.get_height()+1):
            screen.blit(grass,(x*100, y*100))
    screen.blit(player, playerpos)
    screen.blit(castle, (0,30))
    screen.blit(castle, (0,135))
    screen.blit(castle, (0,240))
    screen.blit(castle, (0,345))


    #7 - update the screen
    pygame.display.flip()

    #8 - loop through the events
    for event in pygame.event.get():
        #check if the event is the X button
        if event.type == pygame.QUIT:
            #if it is quit the game
            pygame.quit()
            exit(0)
        if event.type == pygame.KEYDOWN:
            if event.key == K_w:
                keys[0] == True
            elif event.key == K_a:
                keys[1] == True
            elif event.key == K_s:
                keys[2] == True
            elif event.key == K_d:
                keys[3] == True
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_w:
                keys[0] = False
            elif event.key == pygame.K_a:
                keys[1] = False
            elif event.key == pygame.K_s:
                keys[2] = False
            elif event.key == pygame.K_d:
                keys[3] = False

    #9 - Move player
    if keys[0]:
        playerpos[1] -= 5
    elif keys[2]:
        playerpos[1] += 5
    if keys[1]:
        playerpos[0] -= 5
    elif keys[3]:
        playerpos[0] += 5

用到的图片我加在附件上了,使用的时候需要改一下加载路径


castle.png (22.94 KB, 下载次数: 418)

castle.png

dude.png (8.58 KB, 下载次数: 416)

dude.png

grass.png (14.58 KB, 下载次数: 422)

grass.png


作者: ixifanny    时间: 2013-9-5 12:41
使用wasd键
作者: 林夕_信仰    时间: 2013-9-5 13:08
ixifanny 发表于 2013-9-5 12:41
使用wasd键

就是按得wasd键啊,但是没反应,你试了行不行啊?
作者: 林夕_信仰    时间: 2013-9-5 14:24
额,问题解决了,原因是if event.type == pygame.KEYDOWN:代码块里的 keys[n] == True 改为 keys[n] = True ........低级错误,一开始怎么也看不出来,下午又仔细检查了一边才发现。。。。
作者: liqing215    时间: 2013-9-5 15:31

player = pygame.image.load('resources/images/dude.png')

这个路径要怎么设置啊?

我直接和源代码放在一起,直接
player = pygame.image.load('dude.png')

显示 can't open 啊。。。
作者: crossin先生    时间: 2013-9-5 19:13
liqing215 发表于 2013-9-5 15:31
player = pygame.image.load('resources/images/dude.png')

这个路径要怎么设置啊?

你是从哪里运行的?,命令行下的话,你得进入到代码所在目录
作者: crossin先生    时间: 2013-9-5 19:13
liqing215 发表于 2013-9-5 15:31
player = pygame.image.load('resources/images/dude.png')

这个路径要怎么设置啊?

你是从哪里运行的?,命令行下的话,你得进入到代码所在目录
作者: liqing215    时间: 2013-9-5 21:09
crossin先生 发表于 2013-9-5 19:13
你是从哪里运行的?,命令行下的话,你得进入到代码所在目录

直接在IDLE里啊, 图片和代码是放在一起的。。

和之前打飞机那个一样
作者: crossin先生    时间: 2013-9-5 21:25
liqing215 发表于 2013-9-5 21:09
直接在IDLE里啊, 图片和代码是放在一起的。。

和之前打飞机那个一样

那不应该啊




欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5