更新函数之间的精灵位置

时间:2018-01-28 19:27:41

标签: c++ sfml

我正在努力制作一个干净有序的制作精灵的方法。问题是精灵的位置被读为零,它们只是在左上角绘制。

Sprite.h

#ifndef Sprite_h
#define Sprite_h


#endif /* Sprite_h */

using namespace std;
bool show = true;
class Sprite{
public:
    int Spritex;
    int Spritey;
    string name;
    sf::Texture texture;

    Sprite(string image, int x, int y){
        x = Spritex;
        y = Spritey;
        texture.loadFromFile(image);
    }
    sf::Sprite getSprite() {
        sf::Sprite sprite;
        sprite.setTexture(texture);
        sprite.setPosition(Spritex, Spritey);
        return sprite;

    }

    void changeimage(string image);


};

void Sprite:: changeimage(string image){
    texture.loadFromFile(image);

}

的main.cpp

#include <iostream>
#include <SFML/Graphics.hpp>
#include "Character.h"
#include "Projectile.h"
#include "Sprite.h"

//Use std
using namespace std;
//Boolean to determine if screen will scroll
bool scroll = false;

//player that is part of Character class and computer that is part of Sprite class
Character player("/Users/danielrailic/Desktop/Xcode /NewGame/ExternalLibs/Sprites/Player.png");
Sprite computer("/Users/danielrailic/Desktop/Xcode /NewGame/ExternalLibs/Sprites/CompSprite.png", 1200, 100);
Sprite battery("/Users/danielrailic/Desktop/Xcode /NewGame/ExternalLibs/Sprites/battery4.png", 0, 0);

//boolean for whether to show weapon or not
bool showweapon;
//main loop
int main() {
    int windowWidth = 5000;//width of window
    int windowHeight = 5000;//height of window
    sf::RenderWindow window(sf::VideoMode(windowWidth, windowHeight ), "Awesome Game" );//Make the window

    //Setting up the dungeon back-round
    sf::Texture dungeon;
    dungeon.loadFromFile("/Users/danielrailic/Desktop/Xcode /NewGame/ExternalLibs/Sprites/DungeonBack.png");
    sf::Sprite backround;
    backround.setTexture(dungeon);

    while (window.isOpen()){

        // check all the window's events that were triggered since the last iteration of the loop
        sf::Event event;
        while (window.pollEvent(event)){
            // "close requested" event: we close the window
            if (event.type == sf::Event::Closed)
                window.close();
        }
        //Movement
        if (moveChar == true){

            if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)){
                player.left();
                }
            if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)){
                player.right();
                }
            if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up)){
                player.forward();
                }
            if (sf:: Keyboard::isKeyPressed(sf::Keyboard::Down)){
                player.backward();
                }
            if (sf::Keyboard::isKeyPressed(sf::Keyboard::LShift))
            {
                player.Highspeed();
            }
            else{
                player.Lowspeed();
            }
        }
        //If player intersects with comp sprite, pick up comp sprite
        if (player.getSprite().getGlobalBounds().intersects(computer.getSprite().getGlobalBounds())){
            show = false;
            player.hascomp = true;
        }
        //draw and window stuff
        window.clear(sf::Color(255, 255, 255));
        window.draw(backround);
        if (show == true){
            window.draw(computer.getSprite());
        }
        if (show == false){
            window.draw(battery.getSprite());
        }
        window.draw(player.getSprite());
        window.display();
        window.setFramerateLimit(70);

        }
    }

如果您有问题,我会尽力回答。一切正常,除了spritex和spritey由于某种原因被读为0。谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

您正在此处写入变量xy,这是您从未读过的:

Sprite(string image, int x, int y){
    x = Spritex;
    y = Spritey;
    texture.loadFromFile(image);
}

我假设您翻转了作业,应该写

Sprite(string image, int x, int y){
    Spritex = x;
    Spritey = y;
}

Sprite(string image, int x, int y) : Spritex(x), Spritey(y) {
    texture.loadFromFile(image);
}

如果你提高警告级别,你会收到类似这样的事情的警告,以及你仍然拥有的非初始化成员(name