繁体   English   中英

Vector2i不想合作:D

[英]Vector2i doesn't want to cooperate:D

我的问题是在:

if(Keyboard::isKeyPressed(Keyboard::D))
    {
        source.y=right;
        source.x++;
    }

我的简单代码的片段source.y不想采用0值。这是什么原因造成的? 完整代码:

#include <SFML/Graphics.hpp>
#include <iostream>
#include <conio.h>
#include <windows.h>

#define CW 64//cell width

using namespace std;
using namespace sf;

int main()
{
    RenderWindow win(VideoMode(1200,800),"lol");
    win.setFramerateLimit(30);

    Texture t;
    t.loadFromFile("char.png");

    Sprite char_;
    char_.setTexture(t);

    enum dir{right,left,idle};
    Vector2i source(1,idle);


while(win.isOpen())
{
    win.clear();

    if(Keyboard::isKeyPressed(Keyboard::D))
    {
        source.y=right;
        source.x++;
    }
    if(Keyboard::isKeyPressed(Keyboard::A))
    {
        source.y=left;
        source.x++;
    }
    else
    {
        source.y=idle;
    }

    char_.setTextureRect(IntRect(source.x*CW,source.y*CW,CW,CW));


    if(source.x==3 || source.x>3)
    {
        source.x=0;
    }

    cout<<"source.x: "<<source.x<<endl;
    cout<<"source.y: "<<source.y<<endl;

    win.draw(char_);
    win.display();


    system("cls");

}
}

你缺少一个else你的第一个后if

if(Keyboard::isKeyPressed(Keyboard::D))
{
    source.y=right;
    source.x++;
}

if(Keyboard::isKeyPressed(Keyboard::A))
{
    source.y=left;
    source.x++;
}
else
{
    source.y=idle;
}

即使按下D ,您也将最终进入else子句,因为它不是 A。 因此source.y 采用right的值,但将立即被source.y=idle;行覆盖source.y=idle;

您可能想要的是( if在,请检查第二个else前面的else ):

if(Keyboard::isKeyPressed(Keyboard::D))
{
    source.y=right;
    source.x++;
}
else if(Keyboard::isKeyPressed(Keyboard::A))
{
    source.y=left;
    source.x++;
}
else
{
    source.y=idle;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM