현재 C++과 SFML 1.6을 사용하여 여가 시간에 게임을 코딩하고 있습니다. 충돌 감지를 넣을 시간이 주변에있을 때 나는 프로그램이 충돌을 감지하는 성가신 버그에 부딪혔다. 마치 객체가 왼쪽 상단으로 이동하는 고정 된 스프라이트의 크기에 따라 다른 양만큼 이동 한 것처럼 보인다. 이것을 보통 크기의 약 절반으로 테스트하십시오. 내 코드에 버그가 무엇인지는 모르지만 아마도 그렇게 할 수 있습니다. 내 코드는 아래에 나열되어 있습니다. 미리 감사드립니다.SFML 1.6 충돌 문제
#include <SFML/Graphics.hpp>
#include <math.h>
bool collide_rec(sf::Sprite object_1, sf::Sprite object_2);
bool collide_point(sf::Vector2f point, sf::Sprite object);
void collide(sf::Sprite& movable, object& movable_data, sf::Sprite& sationary);
void collide(sf::Sprite& movable, object& movable_data, sf::Sprite& stationary)
{
//Handle Collision NOTE: Results in infinate loop if started on colliding object
for(;collide_rec(movable, stationary);)
{
if((movable_data.move.spd.x<0)||(movable_data.move.left==true||movable_data.direction==LEFT)) movable.Move(1, 0);
if((movable_data.move.spd.x>0)||(movable_data.move.right==true||movable_data.direction==RIGHT)) movable.Move(-1, 0);
if((movable_data.move.spd.y<0)||(movable_data.move.up ==true||movable_data.direction==UP )) movable.Move(0, 1);
if((movable_data.move.spd.y>0)||(movable_data.move.down ==true||movable_data.direction==DOWN)) movable.Move(0, -1);
}
}
bool collide_point(sf::Vector2f point, sf::Sprite object)
{
}
bool collide_rec(sf::Sprite object_1, sf::Sprite object_2)
{
bool hit=true;
sf::Vector2f tl_1, br_1, tl_2, br_2;//Top-Left Coner, Botom Right Corner
//Assign the corners proporly
tl_1= object_1.GetPosition();
tl_2= object_2.GetPosition();
br_1= (object_1.GetPosition()+object_1.GetSize());
br_2= (object_2.GetPosition()+object_2.GetSize());
if((tl_1.x<tl_2.x)&&(br_1.x<tl_2.x) || (tl_1.x<br_2.x)&&(br_1.x<br_2.x)) //if both points are to the left or right on the x demtion
hit=false;
if((tl_1.y<tl_2.y)&&(br_1.y<tl_2.y) || (tl_1.y<br_2.y)&&(br_1.y<br_2.y)) //if both points are to the left or right on the y demtion
hit=false;
return hit;
}