更新函数之间精灵的位置



我正在尝试制作一种干净有序的精灵制作方式。问题是精灵的位置被读取为零,它们只是被绘制在左上角。

雪碧.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);
}

主.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。感谢您的任何帮助。

您正在写入变量x并在此处y,您从未从中读取过:

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(

最新更新