• 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

Object Storage Arubacloud
0 głosów
575 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,590 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,590 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 211 wizyt
pytanie zadane 28 sierpnia 2016 w C i C++ przez Kosmaty205 Początkujący (340 p.)
0 głosów
1 odpowiedź 414 wizyt
0 głosów
2 odpowiedzi 436 wizyt
pytanie zadane 12 marca 2018 w C i C++ przez programkamil Początkujący (270 p.)

92,568 zapytań

141,423 odpowiedzi

319,629 komentarzy

61,956 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...