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;
}
我的问题是:
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;
}