[英]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.