1

我在大学 C 项目(第一个 sem)中工作,我们小组想要制作一个简单的乒乓球游戏,我们决定使用 raylib,因为它看起来很容易。但这是问题所在,在以下代码中:

void UpdatePad(Pad* pad)
{
    int height = GetScreenHeight();
    if (IsKeyDown(pad->Scheme.DownButton)) {
        printf("Down =  %d\n", pad->Scheme.DownButton);
        pad->Position.y += GetFrameTime() * pad->Speed;
            if ( pad->Position.y + pad->Size.y/2 > height ) {
                pad->Position.y = height - pad->Size.y /2;
            }
    }
    if (IsKeyDown(pad->Scheme.UpButton)) {
        printf("Up = %d\n", pad->Scheme.UpButton);
        pad->Position.y -= GetFrameTime() * pad -> Speed;
            if (pad->Position.y - pad->Size.y/2 < 0 ) {
                pad->Position.y = pad->Size.y /2;
            }
    }
}

IsKeyDown无论我做什么,raylib的函数总是返回 true。即使我替换pad->Scheme.DownButtonKEY_UP或其他东西,它总是返回true并执行代码块,有什么解决方案吗?

完整的脚本是:

#include <raylib.h>
#include <stdio.h> 
#include "pad.h"
#include "main.h"

void DrawPad(Pad* pad);

void UpdatePad(Pad* pad);

void Update();

void DrawUpdate();

void Loop();


int main()
{
    int screenWidth = 800;
    int screenHeight = 450;
    InitWindow(screenWidth, screenHeight, "Table Tennis");
    SetTargetFPS(12);

    Loop();
    return 0;
}



void Loop()
{
        while (!WindowShouldClose()) {
                DrawUpdate();
        }
}


void UpdatePad(Pad* pad)
{
    int height = GetScreenHeight();
    if (IsKeyDown(pad->Scheme.DownButton)) {
        printf("Down =  %d\n", pad->Scheme.DownButton);
        pad->Position.y += GetFrameTime() * pad->Speed;
            if ( pad->Position.y + pad->Size.y/2 > height ) {
                pad->Position.y = height - pad->Size.y /2;
            }
    }
    if (IsKeyDown(pad->Scheme.UpButton)) {
        printf("Up = %d\n", pad->Scheme.UpButton);
        pad->Position.y -= GetFrameTime() * pad -> Speed;
            if (pad->Position.y - pad->Size.y/2 < 0 ) {
                pad->Position.y = pad->Size.y /2;
            }
    }
}

void DrawPad(Pad* pad)
{
    DrawRectangle(pad->Position.x, pad->Position.y - (pad->Size.y /2), pad->Size.x, pad->Size.y, WHITE);
}



void DrawUpdate()
{
    const char* scoreLeft = TextFormat("%d", 10);
    int scoreSizeLeft = MeasureText(scoreLeft, 20);
    InputScheme Input = { .DownButton = KEY_S, .UpButton = KEY_W };
    Vector2 paddySize = { .x = 5, .y = 50 };
    Vector2 paddyPos = { .x = GetScreenWidth() - paddySize.x , .y = GetScreenHeight() - paddySize.y };
    Pad pad = { .Size = paddySize, .Speed = 50, .Scheme = Input ,  .Position = paddyPos };
    Vector2 from = {.x = (GetScreenWidth() / (float) 2), .y = 5};
    Vector2 to = { .x = (GetScreenWidth() / (float) 2), .y = ( GetScreenHeight() - (float) 5 ) };


    UpdatePad(&pad);
    BeginDrawing();
            ClearBackground(BLACK);
            DrawLineEx(from, to, 2, LIGHTGRAY);
            DrawText(scoreLeft, (GetScreenWidth()/2) - 10 -scoreSizeLeft, 10, 20, LIGHTGRAY);
            DrawPad(&pad);
    EndDrawing();
}

pad:-

#include <raylib.h>

typedef struct {
    int UpButton;
    int DownButton;
} InputScheme;

typedef struct {
    InputScheme Scheme;
    int Score;
    float Speed;

    Vector2 Position;
    Vector2 Size;
} Pad;

4

0 回答 0