C ++ SFML спрайт не отображается / работает

Я пытаюсь сделать программу, чтобы красный блок падал с верхней части экрана, и игрок должен избегать этого. Когда я запускаю программу, я вижу и двигаю игрока (весло), но не вижу врага или «вещи» спрайта. Пожалуйста, помогите мне, потому что я попробовал все с кодом, и он все еще не работает: /

things.h

#include <SFML/Graphics.hpp>
#include <iostream>
using namespace sf;
using namespace std;
#pragma once

class Thing
{
public:
void thingspawn(RenderWindow &gameDisplay, int &enemystartx, int &enemystarty, int &enemywidth, int &enemyheight, int &blockcolor)
{
RectangleShape thing(Vector2f(enemywidth, enemyheight));
thing.setFillColor(Color(blockcolor));
thing.setPosition(enemystartx, enemystarty);
gameDisplay.clear();
gameDisplay.draw(thing);}
};

main.cpp

#include <iostream>
#include <SFML/Graphics.hpp>
#include "things.h"using namespace std;
using namespace sf;

int main()
{
RenderWindow gameDisplay(VideoMode(1366, 768), "Game", Style::Fullscreen);
gameDisplay.setMouseCursorVisible(false);
gameDisplay.clear();
int enemystarty = -200;
int enemystartx = 300;
int enemyheight = 100;
int enemywidth = 100;
int enemyspeed = 0.3f;
int enemycount = 1;
int dodged = 0;
int blockcolor = (255, 0, 0);

RectangleShape player(Vector2f(300, 30));
player.setFillColor(Color(0, 0, 255));
player.setPosition(400, 728);while (gameDisplay.isOpen())
{
Event evnt;
while (gameDisplay.pollEvent(evnt))
{
switch (evnt.type)
{
case Event::Closed:
gameDisplay.close();
case Event::KeyPressed:
if (Keyboard::isKeyPressed(Keyboard::Q))
gameDisplay.close();

}
}if (Keyboard::isKeyPressed(Keyboard::Right))
if (player.getPosition().x < 1000)
player.move(0.2f, 0.0f);
if (Keyboard::isKeyPressed(Keyboard::Left))
if (player.getPosition().x > 50)
player.move(-0.2f, 0.0f);

Thing thingobject;
thingobject.thingspawn(gameDisplay, enemystartx, enemystarty, enemywidth, enemyheight, blockcolor);

enemystarty += enemyspeed;gameDisplay.draw(player);
gameDisplay.display();}

}

1

Решение

Проблема в том, что вы создаете RectangleShape вещь в функции Thing :: thingspawn (…), и она уничтожается после ее завершения.
Попробуй объявить его членом класса Thing

0

Другие решения

thing рендерится правильно, но только в плохой привычке. как что capi1500 сказал,

Но настоящая проблема в том, что int blockcolor = (255, 0, 0); приводит к черному цвету, когда вы передаете его sf::Color, Вы не увидите черный рисунок на черном холсте, верно?

Здесь вы можете увидеть, как создать цвет из целого числа: Как однозначно упаковать ARGB в одно целое число?

сейчас поменяйте цвет thing используя предопределенные цвета sf :: Color, такие как sf :: Color :: Green, или передавайте каждый компонент, используя другой конструктор Color (Uint8 red, Uint8 green, Uint8 blue, Uint8 alpha=255)

SFML’s sf :: Color документация: http://www.sfml-dev.org/documentation/2.4.2/classsf_1_1Color.php

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector