Wysłany: 2020-05-06, 16:32
Szyszka947
ASP NET Core / Lua
Wiek: 19 Na forum: 2580 dni Posty: 288
Piwa : 16
Witam. Je?li pobior? kraw?dzie obiektu przy u?yciu funckji getGlobalBounds() (biblioteka SFML), to jak sprawdza?, czy obiekt A dotyka kraw?dzi obiektu B? Dzi?ki z g?ry.
Wysłany: 2020-05-07, 23:19
Pawel5321
Szkrypter
Wiek: 36 Na forum: 3810 dni Posty: 237
Nick w MP: Pawell
Piwa : 2315
Więcej szczegółów
Wystawiono 1 piw(a):Szyszka947
Wysłany: 2020-05-08, 11:56
Szyszka947
ASP NET Core / Lua
Wiek: 19 Na forum: 2580 dni Posty: 288
Piwa : 16
Czemu to nie dzia?a? Wszystko jest w main.cpp.
Kod:
template <class T1, class T2> bool isIntersecting(T1& A, T2& B)
{
return true;
}
bool collision(Snake& snake, Apple& apple)
{
if (isIntersecting(snake, apple) == false) return false;
if (isIntersecting(snake, apple) == true)
{
Apple apple;
}
else
{
return false;
}
}
//a w funkcji main. po funkcji update ktora odpowiedzialna jest za ruszanie //snakiem (wylapywanie kilknietych klawiszy i reagowanie na nie) sprawdzam kolizje.
snake.update();
collision(snake, apple);
Wysłany: 2020-05-08, 13:26
Pawel5321
Szkrypter
Wiek: 36 Na forum: 3810 dni Posty: 237
Nick w MP: Pawell
Piwa : 2315
Szyszka947 , twoja funkcja
Kod:
template <class T1, class T2> bool isIntersecting(T1& A, T2& B)
{
return true;
}
zawsze zwraca true,
Kod:
bool collision(Snake& snake, Apple& apple)
{
if (isIntersecting(snake, apple) == false) return false;
if (isIntersecting(snake, apple) == true)
{
Apple apple;
}
else
{
return false;
}
}
a ta funkcja nigdy nie zwraca true, je?li warunek jest spe?niony to jedynie deklaruje nowy obiekt.
Link kt?ry wys?a?em wcze?niej opisuje metod? klasy Rect, a nie funkcj?.
Wysłany: 2020-05-08, 14:25
Szyszka947
ASP NET Core / Lua
Wiek: 19 Na forum: 2580 dni Posty: 288
Piwa : 16
Kod:
template <typename T>
bool sf::Rect< T >::intersects(const Rect< T >& snake) const
{
if (intersects == true)
{
Apple apple;
return true;
}
else
{
return false;
}
}
w jaki spos?b teraz mam wywo?a? t? metode w funkcji main?
Wysłany: 2020-05-08, 14:33
Pawel5321
Szkrypter
Wiek: 36 Na forum: 3810 dni Posty: 237
Nick w MP: Pawell
Piwa : 2315
Szyszka947 , nie definiuj ani nie deklaruj tej funkcji, ona jest ju? w bilbiotekach SFML,
tu przyk?ad u?ycia z ich strony:
Kod:
// Define a rectangle, located at (0, 0) with a size of 20x5
sf::IntRect r1(0, 0, 20, 5);
// Define another rectangle, located at (4, 2) with a size of 18x10
sf::Vector2i position(4, 2);
sf::Vector2i size(18, 10);
sf::IntRect r2(position, size);
// Test intersections with the point (3, 1)
bool b1 = r1.contains(3, 1); // true
bool b2 = r2.contains(3, 1); // false
// Test the intersection between r1 and r2
sf::IntRect result;
bool b3 = r1.intersects(r2, result); // true
// result == (4, 2, 16, 3)
Więcej szczegółów
Wystawiono 1 piw(a):Szyszka947
Wysłany: 2020-05-08, 15:08
Szyszka947
ASP NET Core / Lua
Wiek: 19 Na forum: 2580 dni Posty: 288
Piwa : 16
Meh, chyba nic z tego nie wyjdzie. Mo?e podasz jaki? konkretny przyk?ad ze sprawdzaniem, czy przecinaj? si? dwa obiekty?
Wysłany: 2020-05-08, 16:39
Pawel5321
Szkrypter
Wiek: 36 Na forum: 3810 dni Posty: 237
Nick w MP: Pawell
Piwa : 2315
Program wy?wietla w konsoli "kolizja", gdy kwadraty si? zderzaj?:
Kod:
#include <SFML/Graphics.hpp>
#include <stdio.h>
float x1=0,x2=700;
int main()
{
sf::RenderWindow app(sf::VideoMode(800, 600), "SFML window");
sf::RectangleShape sh1=sf::RectangleShape (sf::Vector2f(100,100));
sf::RectangleShape sh2=sf::RectangleShape (sf::Vector2f(100,100));
sh2.setFillColor(sf::Color::Red);
sh1.setFillColor(sf::Color::Blue);
while (app.isOpen())
{
sf::Event event;
while (app.pollEvent(event))
{
if (event.type == sf::Event::Closed)
app.close();
}
app.clear();
sh1.setPosition(x1,200);
sh2.setPosition(x2,200);
if(sh1.getGlobalBounds().intersects(sh2.getGlobalBounds()))
fprintf(stderr,"%s\n","kolizja");
app.draw(sh1);
app.draw(sh2);
app.display();
x1+=0.05;
x2-=0.05;
if (x2<0) exit(EXIT_SUCCESS);
}
return EXIT_SUCCESS;
}
Więcej szczegółów
Wystawiono 1 piw(a):Szyszka947
Wysłany: 2020-05-08, 17:18
Szyszka947
ASP NET Core / Lua
Wiek: 19 Na forum: 2580 dni Posty: 288
Piwa : 16
Dzi?ki, dzia?a. Da?em Ci respekt i 3 piwka . Je?li by? m?g?, to prosi? bym tak nie w temacie o wyja?nienie, dlaczego obiekt si? nie tworzy, kiedy kwadraty si? zderzaj?;
Kod:
if (snake.kolizja().intersects(apple.kolizja()))
{
Apple apple;
}
A dla innych os?b zostawi? tu rozwi?zanie, kt?re ja zastosowa?em, z powodu gdy? nie trzymam wszystkiego w main.cpp:
W pliku nag??wkowym (.h):
Kod:
W pliku o tej samej nazwie, co plik nag??wkowy (cpp):
Kod:
FloatRect Apple::kolizja()
{
return apple.getGlobalBounds();
}
A przy sprawdzeniu w main.cpp
Kod:
if (snake.kolizja().intersects(apple.kolizja()))
Wysłany: 2020-05-08, 17:22
Pawel5321
Szkrypter
Wiek: 36 Na forum: 3810 dni Posty: 237
Nick w MP: Pawell
Piwa : 2315
Szyszka947 ,
Metoda
Kod:
FloatRect Apple::kolizja()
{
return apple.getGlobalBounds();
}
zwraca FloatRect obiektu apple w obiekcie Apple, a snake jest innym obiektem.
Wysłany: 2020-05-08, 17:47
Szyszka947
ASP NET Core / Lua
Wiek: 19 Na forum: 2580 dni Posty: 288
Piwa : 16
Do zamkni?cia :v. Dzi?ki jeszcze raz!
Tagi: getglobalbounds()
Anonymous
Na forum: 245 dni
Posty: 1
Anonymous Koniecznie zajrzyj na: