输入后出现纹理

时间:2014-08-14 13:14:23

标签: c++ sdl-2

void CChat::nextDialogue(CTexture* speech, int currentDialogue, int afterDialogue, int ticks)
{
if(dialogueClick == currentDialogue)
{
    speech->draw();     
    if(mainEvent->type == SDL_MOUSEBUTTONDOWN && ticking >= ticks)
    {
    dialogueClick = afterDialogue;
    speech->goodBye();
    }
    if(ticking <= (ticks + 2000))
    {
    ticking = SDL_GetTicks() - 2000;
    cout << ticking << endl;
    }
}

}

嗨,我在点击一个按钮后试图找到一种让纹理出现在屏幕上的方法,但它的作用是它只读取点击的输入并仅在输入时显示纹理。

Speech->goodBye()

来自另一个类并包含和SDL_DESTROYTEXTURE,以便它可以加载另一个纹理。代码实际上做了我基本上想要的,加载和卸载图像,但它非常依赖于时间。

nextDialogue(S1, 0, 1, 2000);
nextDialogue(S2, 1, 2, 4000);
nextDialogue(S3, 2, 3, 6000);

这是我在游戏循环中添加的样本,S1代表纹理,最终的数字代表计算机在读取按键事件之前需要达到的毫秒数可以制作一百个数字印刷机并导致多次跳过。

我尝试过漏洞,制作变量,使用开关等等。但这是迄今为止最成功的一个,虽然取决于时间。

这里的问题是,如果我满足其他纹理的时间要求,则会出现该纹理,而不是之前的纹理。

这里有没有人更好地了解如何在用户按下输入后使纹理显示并在屏幕上显示REMAIN直到用户按下另一个输入?

1 个答案:

答案 0 :(得分:0)

好吧,我终于开始工作了,经过几个半心半意的苦苦思索...... 它也使用计时器,但这一次,它使用2个计时器。 Timer1在函数开始时初始化,每次按下DOWN键,timer2将等于timer1,然后我检查if语句是否

timer1 >= timer2;

然后纹理将从屏幕中删除,我还添加了一个名为dialogClick的int,这对应于参数中的另外两个整数,即currentcene和after scene。 dialogClick应该等于currentScene,以便纹理将在与定时器关联的if语句中呈现,如果我们要触发输入,那么dialogClick将等于afterScene,这样我可以根据选择分支多个对话。第一个问题是你不能只为dialogClick添加1,因为这样做只要满足要求就会增加1。我不在我的笔记本电脑上,这就是我无法发布代码的原因。

编辑:这是代码

  void CChat::run(CTexture* speech, int currentDialogue, int afterDialogue, CTexture* 

character)
{
    if(scene == currentDialogue && notClicked)
    {
        speech->draw();
        if(character != NULL)
        {
            nBox->draw();
            character->draw();
        }
        if(mainEvent->type == SDL_MOUSEBUTTONDOWN)
        {
            clicked = true;
            ticking3 = ticking;
        }
        if(clicked == true && mainEvent->type == SDL_MOUSEBUTTONUP)
        {
            notClicked = false;
        }

        if(mainEvent->type == SDL_KEYDOWN)
        {
            if(mainEvent->key.keysym.sym == SDLK_SPACE)
            {
                clicked = true;
                ticking3 = ticking;
            }
        }
        if(clicked == true && mainEvent->type == SDL_KEYUP)
        {
            if(mainEvent->key.keysym.sym == SDLK_SPACE)
            {
                notClicked = false;
            }
        }

    }
    else if(!notClicked && ticking >= ticking3 && scene == currentDialogue)
    {
        clicked = false;
        notClicked = true;
        speech->goodBye();
        scene = afterDialogue;
    }

}

以下是你应该在游戏圈中使用的样本

run(S1, 1, 2, Mom);
run(S2, 2, 3, Mom);
run(S3, 3, 4, Mom);
run(S4, 4, 5, Dad);

(纹理,当前场景编号,完成后场景移动到的场景编号,以及为使循环显得更细而添加的正在讲话的角色)

我真的希望这可以帮助另一个人。