0
뱀의 oop 버전에서 sfml 2.0 라이브러리를 사용하고 있으며 충돌을 처리하기위한 별도의 클래스가 있습니다. 여기 코드는 다음과 같습니다 SFML 2.0 충돌 클래스
는 "collision.hpp"를 포함bool sfc::Sprite::collision(sfc::Sprite sprite2) {
this->setBounds();
sprite2.setBounds();
if (top > sprite2.bottom || bottom < sprite2.top || left > sprite2.right || right < sprite2.left) {
return false;
}
return true;
}
void sfc::Sprite::colMove(sf::Vector2f &movement, sfc::Sprite sprite2) {
if (!this->collision(sprite2)) {
this->move(movement);
}
}
void sfc::Sprite::colMove(float x, float y, sfc::Sprite sprite2) {
if (!this->collision(sprite2)) {
this->move(x, y);
}
}
void sfc::Sprite::setBounds() {
top = this->getPosition().y;
bottom = this->getPosition().y + this->getTexture()->getSize().y;
left = this->getPosition().x;
right = this->getPosition().x + this->getTexture()->getSize().y;
}
유일한 문제는 충돌 이벤트가 발생하면, 스프라이트는 윈도우 남은 생애 동안 붙어있다. 어떻게 충돌을 일으켜서 거기에 붙지 않도록 할 수 있습니까? 감사! ~ 마이클
편집 : 나는 충돌이 발생한 후에 스프라이트가 움직일 수 없다는 것을 알고 있지만, 충돌 후에 스프라이트가 움직이지 않게하는 다른 방법을 모른다.
불행하게도이 작동하지 않습니다 내가 제대로 그래서 + 및 확인 sfml에서 사용하는 좌표계를 기억하지 않습니다. 내 스프라이트는 충돌 후 움직일 수 없다는 것을 알았지 만 위에 게시 한 코드는 충돌이 발생하기 전에 두 스프라이트 사이의 거리 만 변경합니다. – Michaelslec
오, 알았어. 나는 smfl에 대해 많이 기억하지 않지만 어쨌든 그것이 당신을 조금 도왔 으면 좋겠다. – th3sn4k3
해답을 가져 주셔서 감사합니다! 감사합니다 :) – Michaelslec