• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ SFML dynamiczne tworzenie obiektów na przycisk

Mały hosting, OGROMNE możliwości
0 głosów
836 wizyt
pytanie zadane 29 marca 2019 w C i C++ przez milioneq Początkujący (260 p.)
edycja 29 marca 2019 przez milioneq
#include "pch.h"
#include <iostream>
#include <SFML\Graphics.hpp>
#include <SFML\Window.hpp>
#include <SFML\System.hpp>

using namespace std;
using namespace sf;

class Flower {
public:
	Flower() {
	}

	void create(float posx, float posy, bool tr, RenderWindow &window, float dt) {

		sprite.setPosition(posx, posy);
		texture.loadFromFile("data/img/red.png");

		l += 2 * dt;

		sprite.setTexture(texture);

		if (l >= 2 && l < 4)
			texture.loadFromFile("data/img/blue.png");
		if (l >= 4 && l < 6)
			texture.loadFromFile("data/img/green.png");
		if (l >= 6)
			texture.loadFromFile("data/img/yellow.png");


		window.draw(sprite);


	}

	Sprite sprite;
	Texture texture;
	float l = 0;
};

int main()
{
	Flower *flower;

	RenderWindow window(VideoMode(640, 640, 32), "Gra");
	window.setFramerateLimit(60);

	Clock clock;
	float dt = 0;

	Event e;

	while (window.isOpen())
	{
		dt = clock.restart().asSeconds();

		while (window.pollEvent(e))
		{
			switch (e.type) {
				case Event::Closed:
					window.close();
					break;
			}
			if (e.type == Event::KeyPressed && e.key.code == Keyboard::A) {
				flower = new Flower;
				flower->create(200, 200, 1, window, dt);
			}
		}
		

		window.display();
		window.clear();
	}
}

Chciałem zrobić dodatek do prostej gry 2d taki, że po naciśnięciu danego klawisza w miejscu gracza pojawia się nowy obiekt drzewa, jak próbuje dać if(Keyboard::isKeyPressed(Keyboard::Space)) to wyświetla się, ale gdy puszczam to znika. Ma ktoś jakieś rozwiązanie?

komentarz 29 marca 2019 przez niezalogowany
W pliku milioneq.cpp zapomniałeś o funkcji wstaw_kod().
komentarz 29 marca 2019 przez criss Mędrzec (172,570 p.)
Kod?
komentarz 29 marca 2019 przez milioneq Początkujący (260 p.)
dodałem
komentarz 29 marca 2019 przez milioneq Początkujący (260 p.)
poza tym nie wiem, jak mogę zrobić, aby obiektów Flower mogło być więcej niż 1

1 odpowiedź

0 głosów
odpowiedź 29 marca 2019 przez criss Mędrzec (172,570 p.)

Znika, bo rysujesz w create(), a potem od razu czyścisz ekran. Czyszczenie ekraniu ofc jest ok, ale wszystko ma być rysowane w każdej klatce.

Poza tym: nie zwalniasz pamięci, a na dodatek za każdym jak klikasz spacje, to nadpisujesz pointer do zaalokwanego obiektu. Czyli memleak przy każdym naciśnieciu spacji.

Kolejna sprawa: NIE ŁADUJ TEKSTUR DLA KAŻDEGO SPRAJTA OSOBNO. Tak na dobrą sprawę nawet sprajta potrzebujesz tylko jednego. Po prostu ustawiasz sprajta na pozycje gdzie ma sie znalezc pierwszy kwiatek czy tam drzewko i rysujesz, przestawiasz na kolejną pozycje i znowu rysujesz itd...

poza tym nie wiem, jak mogę zrobić, aby obiektów Flower mogło być więcej niż 1

Potrzebujesz jakiś kontener (std::vector moze byc) na sprajty (albo kontener pozycji na ktore bedziesz przestawial jednego sprajta) i w pętli rysujesz wszystkie po kolei.

Podobne pytania

0 głosów
2 odpowiedzi 534 wizyt
pytanie zadane 28 sierpnia 2016 w C i C++ przez Kosmaty205 Początkujący (340 p.)
0 głosów
1 odpowiedź 515 wizyt
0 głosów
2 odpowiedzi 810 wizyt
pytanie zadane 12 marca 2018 w C i C++ przez programkamil Początkujący (270 p.)

93,717 zapytań

142,629 odpowiedzi

323,261 komentarzy

63,262 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...