首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在注册某些输入的屏幕边界(向下和右边)时出错

在注册某些输入的屏幕边界(向下和右边)时出错
EN

Stack Overflow用户
提问于 2019-07-11 07:11:02
回答 1查看 43关注 0票数 0

我正在使用gbdk为DMG创建一个滚动射手,它是基于youtube的一些教程和示例。事实上,链接是我的程序的骨架。我的问题是,屏幕边界条件不适合向下和正确的输入。然而,对于向上和左边,它们的工作方式是正确的,这些代码基本上是完全相同的。我也从上面的链接编译了代码,它在那里正确工作。提前道歉,我有一种幼稚的幽默感,所以游戏是以阴茎为基础的。

框架代码和我的代码之间的主要区别是,我对播放器使用了一个meta,对于播放器的x和y坐标使用了一个数组。我试过用单个整数来表示位置和改变屏幕的边界,但是似乎没有什么效果。

代码语言:javascript
复制
#include <gb/gb.h>
#include <stdio.h>
#include "gameDicks.c"
#include "DickSprites.c"

#define SCREEN_WIDTH 160

BOOLEAN ishard = TRUE, playing = TRUE;
struct gameDicks flacid;
struct gameDicks hard;
INT8 spritesize = 8, dicklocation[2] = {20, 80};
int i;

void moveGameDicks(struct gameDicks* Dick, UINT8 x, UINT8 y){
    move_sprite(Dick->spriteids[0], x, y);
    move_sprite(Dick->spriteids[1], x + spritesize, y);
    move_sprite(Dick->spriteids[2], x, y + spritesize);
    move_sprite(Dick->spriteids[3], x + spritesize, y + spritesize);
}

void setuphard(INT8 dicklocation[2]){
    hard.x = dicklocation[0];
    hard.y = dicklocation[1];
    hard.width = 16;
    hard.height = 16;

    //load sprites

    set_sprite_tile(0,0);
    hard.spriteids[0] = 0;
    set_sprite_tile(1,1);
    hard.spriteids[1] = 1;
    set_sprite_tile(2,2);
    hard.spriteids[2] = 2;
    set_sprite_tile(3,3);
    hard.spriteids[3] = 3;

}   
void init_screen()
{
   SHOW_BKG;
   SHOW_SPRITES;
   DISPLAY_ON;
}

void init_player()
{
 SHOW_SPRITES;
 set_sprite_data(0, 8, DickSprites);
 setuphard(dicklocation);  
}

void input()
{
    if (joypad() & J_UP && dicklocation[1])
    {
        if (dicklocation[1] <= 16){ 
            dicklocation[1] = 16;
        } 
        else{
            dicklocation[1]--; 
        }    
    }
    if (joypad() & J_DOWN && dicklocation[1])
    {
        if (dicklocation[1] >= 150){
            dicklocation[1] = 150;
        }    
        else{
            dicklocation[1]++;          
        }   
    }
}


void update_sprites()
{
        moveGameDicks(&hard, dicklocation[0], dicklocation[1]);
}

int main()
{
    init_screen();
    init_player();
    init_screen();


    while(playing)
    {
        wait_vbl_done(2); 
        input();
        update_sprites();
    }
    return 0;
}

我所期望的是能够将玩家移动到y= 16,然后下降到y= 150。当它碰到这些值时,它就停止移动,直到你朝另一个方向移动。相反,我看到的是向上的方向和预期的一样工作,但是只要按下键--不管y-位置--玩家立即被发送到屏幕的底部。从那里,按压把它送到最上面。此外,玩家只能从顶部移动到底部,不能在中间滚动。我对此感到困惑,因为条件是完全相同的(除了y-值),所以我不明白它们为什么表现得如此不同。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-11 09:11:46

在这里使用无符号int可能会有所帮助,因为8位整数只包含-128到127之间的值,这可能会导致与超过150的值比较时未定义的行为,将其推到负值吗?

您已经将dicklocation定义为一个INT8,如果您计划屏幕大小超过255个字节,它将更好地作为一个UINT8,甚至更长。

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

https://stackoverflow.com/questions/56983518

复制
相关文章

相似问题

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