首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么libnds中的keysDownRepeat()在多次调用时似乎不起作用?

为什么libnds中的keysDownRepeat()在多次调用时似乎不起作用?
EN

Stack Overflow用户
提问于 2008-11-24 01:46:13
回答 2查看 453关注 0票数 1

我有这样的代码,可以在游戏中左右上下移动玩家:

代码语言:javascript
复制
keysSetRepeat(20, 5);

while (lives) {
    scanKeys();

    if (keysDownRepeat() & (KEY_LEFT | KEY_RIGHT | KEY_UP | KEY_DOWN)) {
        u8 new_x = x;
        u8 new_y = y;

        if (keysDownRepeat() & KEY_LEFT) {
            new_x--;
        } else if (keysDownRepeat() & KEY_RIGHT) {
            new_x++;
        } else if (keysDownRepeat() & KEY_DOWN) {
            new_y++;
        } else if (keysDownRepeat() & KEY_UP) {
            new_y--;
        }

        // ...
    }

    // ...

    swiWaitForVBlank();
}

为什么检测不到密钥?如果我用keysDown()替换keysDownRepeat(),它就能工作(当然,没有重复频率)。documentation在这里帮不上忙。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2008-11-24 01:46:23

我不得不找到libnds的源代码来解决这个问题。看看keysDownRepeat()的实现:

代码语言:javascript
复制
uint32 keysDownRepeat(void) {
    uint32 tmp = keysrepeat;

    keysrepeat = 0;

    return tmp;
}

它实际上会返回密钥,然后将它们重置为0。这并没有记录在案。我解决这个问题的方法是将keysDownRepeat()的结果存储到一个变量中,并使用该变量检查密钥:

代码语言:javascript
复制
keysSetRepeat(20, 5);

while (lives) {
    scanKeys();
    u32 keys_down_repeat = keysDownRepeat();

    if (keys_down_repeat & (KEY_LEFT | KEY_RIGHT | KEY_UP | KEY_DOWN)) {
        u8 new_x = x;
        u8 new_y = y;

        if (keys_down_repeat & KEY_LEFT) {
            new_x--;
        } else if (keys_down_repeat & KEY_RIGHT) {
            new_x++;
        } else if (keys_down_repeat & KEY_DOWN) {
            new_y++;
        } else if (keys_down_repeat & KEY_UP) {
            new_y--;
        }

        // ...
    }

    // ...

    swiWaitForVBlank();
}
票数 2
EN

Stack Overflow用户

发布于 2009-12-09 00:12:41

另请注意,您使用keysHeld()来标识上一帧中“仍然按住”的关键点,而keysDown()通常用于帮助您标识“刚刚按下此帧的关键点”(即,在两次scanKeys()调用之间)。keysDownRepeat()显然对那些想要使用DPAD滚动列表的类似键盘行为的人很有用:您将在每个X帧中重复看到“再次向下”键。不过,无可否认,keysDownRepeat()的语义定义很差……

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/313253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档