Wrobek12 Temat założony przez niniejszego użytkownika |
Wyświetlanie sprite przy kolizji i pauza - sfml » 2019-01-12 13:56:56 Witam, mam problem w wyświetlaniem się sprite przy kolizji z innym spritem oraz pauzowaniem gry.
Kod wygląda następująco:
if ((Sprite.getBounds().intersects(Sprite2.getGlobalBounds()))) { window.draw(napis.getNapis()); window.waitEvent(event);
if (event.key.code == sf::Keyboard::T) { window.close(); } else { window.display(); }
}
};
Przy kolizji gra się pauzuje, ale nie wyświetla się sprite. Jakiej modyfikacji należy dokonać, aby najpierw wyświetlił się sprite, a od razu po nim nastąpiła pauza ? Kolejny problem mam z pauzą.. Nie mogę zdefiniować zdarzenia "event" tak, aby czekał on na wciśnięcie konkretnego klawisza, a nie tak jak teraz - na każde zdarzenie, nawet ruch myszki :) |
|
pekfos |
» 2019-01-12 15:35:05 Próbujesz to zrobić jak aplikację konsolową, czyli tak źle, jak tylko się da. Główna pętla programu ma się wykonywać na okrągło, niezależnie od tego czy gra jest wstrzymana, czy nie. Wszelką logikę musisz pisać z uwzględnieniem tego, że program nie może się zatrzymywać. W przeciwnym razie program po prostu nie będzie działać poprawnie. |
|
Wrobek12 Temat założony przez niniejszego użytkownika |
» 2019-01-12 15:42:47 Tak, ale głównego programu nie zatrzymuję, jeżeli jest zdefiniowany jako sf::Event Zdarzenie, a ja korzystam z sf::Event event, zgadza się ? To są chyba 2 oddzielne wydarzenia, na które czeka program. Nie jestem w tym temacie ekspertem, ale tak to właśnie rozumiem.
@Edit. Jeżeli nie zatrzymywać ekranu tym, to jakie polecenie powinienem zastosować ? |
|
pekfos |
» 2019-01-12 15:44:30 Twoja aktualna pauza działa przez zatrzymanie programu, więc błędnie. |
|
Wrobek12 Temat założony przez niniejszego użytkownika |
» 2019-01-12 15:49:55 Jakim poleceniem powinienem zastąpić aktualną pauzę, aby gra okienkowa działała poprawnie ?
system("Pause") też nie wykonuje się poprawnie. Rzekłbym, że jest nawet gorzej, niż aktualnie. |
|
pekfos |
» 2019-01-12 15:57:36 Chyba nie zrozumiałeś tego, co pisałem pogrubionym tekstem. Program nie może się zatrzymywać, więc każda metoda zatrzymywania programu będzie mniej lub bardziej błędna. Kod ma się wykonywać wielokrotnie w ciągu sekundy, więc nie możesz wyrażać stanu programu tym, gdzie się w programie znajdujesz. Zmienne brzmią jak coś w czym można przechowywać informacje. Np, czy gra w danym momencie ma być wstrzymana czy nie. Instrukcje if z kolei przydadzą się by w obsłudze zdarzeń, aktualizacji i wyświetlaniu gry wcielić w życie cokolwiek ta pauza ma zmieniać w działaniu programu. |
|
Wrobek12 Temat założony przez niniejszego użytkownika |
» 2019-01-12 16:06:15 Rozumiem, że najlepszą metodą jest nie wstrzymanie programu, tylko nadanie wszystkim elementom prędkości 0, aby w programie się zwyczajnie nic nie poruszało ? |
|
pekfos |
» 2019-01-12 16:14:40 A potem co? Przywrócisz te wartości? Co jeśli każdy obiekt ma inną? Jakbyś po prostu nie wykonywał całego kodu odpowiedzialnego za poruszanie obiektów, to te obiekty też się nie będą poruszać. I będzie to bez porównania łatwiejsze rozwiązanie niż twoje. |
|
« 1 » 2 3 4 |