我用C编写的程序不能正常运行.我使用的是Mac OS.

我的程序是用WASD键移动正方形的,但可执行文件在编译时没有打开.

以下是我的代码:

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

#define SW 800
#define SH 800

int main() {
    int posX = 0;
    int posY = 0;
    char posX2;
    char posY2;

    InitWindow(SW, SH, "Window");

    while (!WindowShouldClose()) {
        scanf("%c", &posX2);
        scanf("%c", &posY2);

        switch (posX2) {
          case 'a':
            posX--;
            break;

          case 'd':
            posX++;
            break;
        }

        switch (posY2) {
          case 'w':
            posY--;
            break;

          case 's':
            posY++;
            break;
        }

        BeginDrawing();
            ClearBackground(RAYWHITE);
            DrawRectangle(posX, posY, 100, 100, RED);
        EndDrawing();
    }

    CloseWindow();

    return 0;
}

这是操作系统的问题还是Raylib的问题?

推荐答案

由于标准流缓冲和终端线路规则,scanf()不适合读取键盘输入.值得庆幸的是,raylib Take为读取键盘状态提供了一个便携且功能强大的替代方案:您可以使用带有键符号的IsKeyDown(),例如,KEY_A代表字母数字键,KEY_LEFT代表键盘状态.用于光标移动键.有关更多信息和示例,请查看文档.

以下是修改后的版本:

#include <stdio.h>
#include <raylib.h>

#define SW 800
#define SH 800

int main(void) {
    int posX = 0;
    int posY = 0;

    InitWindow(SW, SH, "Window");

    while (!WindowShouldClose()) {

        if (IsKeyDown(KEY_A)) posX--;
        if (IsKeyDown(KEY_D)) posX++;
        if (IsKeyDown(KEY_W)) posY--;
        if (IsKeyDown(KEY_S)) posY++;

        BeginDrawing();
            ClearBackground(RAYWHITE);
            DrawRectangle(posX, posY, 100, 100, RED);
        EndDrawing();
    }

    CloseWindow();

    return 0;
}

C++相关问答推荐

了解一些CLIPS原语数据类型

InetPton()函数无效的IP地址

如何在IF语句中正确使用0.0

为什么GCC C23中的关键字FALSE不是整数常量表达式?

N的值设置为0或1(未定义的行为),而我正在try 学习realloc和Malloc的用法

如何在STM8项目中导入STM8S/A标准外设库(ST VisualDeveloper)?

如何在C++中处理按键

GTK3按钮信号错误

用C++实现余弦函数

是否需要包括<;errno.h>;才能使用perror?

RawMotion的XInput2错误(具有较高值的XISelectEvents上的BadValue)

编译器如何处理具有更复杂值的枚举?

C代码在字符串中删除不区分大小写的子字符串的问题

静态初始化顺序失败是否适用于C语言?

我不知道为什么它不能正常工作,我用了get()和fget(),结果是一样的

c程序,让用户输入两类数字,并给出输出用户输入多少个数字

WSASocket在哪里定义?

C 语言中 CORDIC 对数的问题

在带中断的循环缓冲区中使用 易失性

仅使用其内存地址取消引用 C 中的 struct