代码之家  ›  专栏  ›  技术社区  ›  Adam W.

Vector2i不想合作:D

  •  0
  • Adam W.  · 技术社区  · 7 年前

    我的问题是:

    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");
    
    }
    }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   nvoigt    7 年前

    您缺少一个 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 如果被按下,你将进入决赛 子句,因为它是 A. . 所以 source.y 取的值 right ,但将立即被该行覆盖 source.y=idle;

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

    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;
    }