Vector2i 不想 cooperate: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");

}
}

您在第一个 if 之后缺少一个 else

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;

行覆盖

你可能想要的(勾选第二个if前面的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;
}