【问题标题】:Sprite not moving when using a function from another class SFML c++使用另一个类SFML c ++中的函数时精灵不移动
【发布时间】:2013-10-30 22:18:09
【问题描述】:

我有一个 Game.cpp,我正在我的 Player 类中调用一个更新函数。在我的播放器更新功能中,我用它来检查键盘输入,它似乎可以工作,但是每当我尝试调用 .move() 函数时,它似乎都不起作用。我也没有错误。我是 sfml 的新手,并且对 c++ 很满意。感谢您的帮助!

#include "Player.h"


Player::Player(void):
    vel(0),
    maxvel(100)
{
    Load("Assets/sss.png",true);
}

void Player::Update(sf::Sprite& p)
{
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::A))
    {
        moveObject(-3,0, p);
    }
    if(sf::Keyboard::isKeyPressed(sf::Keyboard::D))
    {
        moveObject(-3,0, p);
    }
}


Player::~Player(void)
{
}

这是游戏对象 cpp

#include "GameObject.h"
#include <iostream>


GameObject::GameObject(void)
{
    isLoaded = false;
}

void GameObject::Load(std::string flname, bool isPlayer)
{
    if(!tex.loadFromFile(flname))
    {
        EXIT_FAILURE;
    }
    else
    {
        if(isPlayer)
        {
            if(!tex.loadFromFile(flname, sf::IntRect(0,0,33,33)))
            {
                EXIT_FAILURE;   
            }
            else
            {
                std::cout << "Loading image" << "\n";
                filename = flname;
                spr.setTexture(tex);
                isLoaded = true;
            }
        }
        else
        {
            std::cout << "Loading image" << "\n";
            filename = flname;
            spr.setTexture(tex);
            isLoaded = true;
        }
    }
}

void GameObject::Draw(sf::RenderWindow & window)
{
    if(isLoaded)
    {
        window.draw(spr);
        window.display();
        std::cout << "Sprite drew" << "\n";
    }
}

void GameObject::setPos(float x, float y)
{
    if(isLoaded)
    {
        spr.setPosition(x,y);
    }
}

sf::Vector2f GameObject::GetObjPos()
{
    return spr.getPosition();
}


sf::Sprite& GameObject::getSprite()
{
    return spr;
}

void GameObject::moveObject(float x, float y, sf::Sprite& sp)
{
    sp.move(x, y);
}


GameObject::~GameObject(void)
{
}

【问题讨论】:

  • 你能显示一些代码吗?
  • 具体是什么代码?
  • 好吧,你刚刚告诉我们你的一些课程。我怀疑没有任何进一步的信息,任何人都能够提供帮助。首先,你调用 move 函数的地方怎么样?
  • 刚刚在我的播放器类中编辑,我怀疑这是否足以获得帮助。我也会添加我的其他人。
  • 所有的伪OO货崇拜有什么用? void GameObject::moveObject(float x, float y, sf::Sprite&amp; sp) { sp.move(x, y); } - 有什么用? GameObject 是否会为它传递给 sprite 的任何调用收取费用?

标签: c++ sfml sprite


【解决方案1】:

从显示的代码中,您应该将 moveObject 重写为

void GameObject::moveObject(float x, float y)
{
    spr.move(x, y);
}

其中 spr 是在类中其他地方使用的 GameObject 的成员变量

【讨论】:

    【解决方案2】:

    把你的 moveObject 函数改成这个

    void GameObject::moveObject(float x, floaty)
    {
        spr.setPosition(x, y);
    }
    

    如果您需要获取 x 和 y 位置,请为 spr 创建一个 get 方法或将其公开

    【讨论】:

      猜你喜欢
      • 2013-08-19
      • 2017-05-19
      • 2017-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-21
      相关资源
      最近更新 更多