pygame连续和同时键输入

时间:2016-04-27 12:38:02

标签: python python-2.7 keyboard pygame

我再次陷入困境,无法在线找到任何有效的解决方案。我试图使用pygame及其关键输入来控制各种事物。现在我需要同时使用几个键。我的代码如下:

private void popClass()
{
    cmbClass.Items.Clear();
    DataSet ds = new DataSet();
    cmbClass.Items.Add("---Select----");
    string sqlPS = @"SELECT * FROM tblclass_msb";
    try
    {
        using (FbConnection conPS = new FbConnection(connectionString))
        {
            conPS.Open();
            using (FbCommand cmdPS = new FbCommand(sqlPS, conPS))
            {
                using (FbDataAdapter da = new FbDataAdapter())
                {
                    da.SelectCommand = cmdPS;
                    da.Fill(ds);
                    cmbClass.DataSource = ds.Tables[0];
                    cmbClass.ValueMember = "c_id";
                    cmbClass.DisplayMember = "c_name";
                }
            }
        }
    }
    catch (FbException ex)
    {
        MessageBox.Show("PC-->>" + ex.Message);
    }
}

现在我遇到的问题是: 当我按下"左边的"它正确并连续地记录我向左/向右按下。但是,当我进入" LEFT"然后点击" RIGHT",它会记录左右按下但它会停止注册" LEFT"仍然受到压力。

任何想法? 任何帮助将不胜感激。 米莎

2 个答案:

答案 0 :(得分:1)

你在pygame.key.repeat()中拼写错误了。我纠正了这一点,它对我有用。

def main():
    while Running:
        check_events()
        update()
        clock.tick(FPS) 

def check_events():
    events = pygame.event.get()
    for event in events:
        if event.type == pygame.QUIT:
            sys.exit()

            if key == pygame.K_q:
                Running = False
                return

        if (pygame.key.get_pressed()[pygame.K_LEFT]):
            #EXECUTE_FUNCTION1()
            print "left"
        if (pygame.key.get_pressed()[pygame.K_RIGHT]):
            #EXECUTE_FUNCTION2()
            print "right"

答案 1 :(得分:1)

在我的代码中,“重复”拼写正确。

我找到了解决问题的方法。上面的代码需要修改。

pygame.key.set_repeat(50,50)
bProgramLoop = True
while (bProgramLoop == True):

    for event in pygame.event.get():
        if (event.type == pygame.QUIT):
            bProgramLoop = False
        if (event.type == pyame.KEYDOWN):
            if (event.key == pygame.K_a)   # if A is pressed
                bKeyA = True               # set the Boolean True
            if (event.key == pygame.K_s)   
                bKeyS = True
        if (event.type == pyame.KEYDOWN):
            if (event.key == pygame.K_a)   # if A is released
                bKeyA = False# set the Boolean False
            if (event.key == pygame.K_s)   
                bKeyS = False

    if (bKeyA == True):
        Execute_function1()
    if (bKeyB == True):
        Execute_function2()

我仔细检查,重复拼写正确,一旦敲击另一个键盘输入,就不会继续键盘输入。问题是,据我所知,甚至在按下键时发生一次。当同时按下另一个键时,事件将丢失。

因此解决方案是将变量设置为true,直到键被提升为止,因此变量设置为false。