একাধিক আয়তক্ষেত্রের সাথে সংঘর্ষে চলনযোগ্য আয়তক্ষেত্র পেতে আমার অসুবিধা হচ্ছে।
আমি এসএফএমএল ব্যবহার করছি এবং এটিতে একটি কার্যকর ফাংশন রয়েছে intersects
যা 2 টি আয়তক্ষেত্র নেয় এবং ছেদগুলি ফিরে দেয়। আমার একটি আয়তক্ষেত্র পূর্ণ ভেক্টর রয়েছে যা আমি চাই যে আমার চলমান আয়তক্ষেত্রের সাথে সংঘর্ষ ঘটুক। আমি নিম্নলিখিত কোডটি ব্যবহার করে এর মাধ্যমে লুপ করছি (পি মুভমেন্টাল আয়তক্ষেত্র)।
IsCollidingWith
একটি বিল ফেরত দেয় তবে ছেদগুলি intersects
কাজ করার জন্য এসএফএমএলও ব্যবহার করে।
while(unsigned i = 0; i!= testRects.size(); i++){
if(p.IsCollidingWith(testRects[i]){
p.Collide(testRects[i]);
}
}
এবং আসল Collide()
কোড:
void gameObj::collide( gameObj collidingObject ){
printf("%f %f\n", this->colliderResult.width, this->colliderResult.height);
if (this->colliderResult.width < this->colliderResult.height) {
// collided on X
if (this->getCollider().left < collidingObject.getCollider().left ) {
this->move( -this->colliderResult.width , 0);
}else {
this->move( this->colliderResult.width, 0 );
}
}
if(this->colliderResult.width > this->colliderResult.height){
if (this->getCollider().top < collidingObject.getCollider().top ) {
this->move( 0, -this->colliderResult.height);
}else {
this->move( 0, this->colliderResult.height );
}
}
এবং IsCollidingWith()
কোডটি হ'ল:
bool gameObj::isCollidingWith( gameObj testObject ){
if (this->getCollider().intersects( testObject.getCollider(), this->colliderResult )) {
return true;
}else {
return false;
}
Rect
দৃশ্যে যখন 1 জন থাকে তখন এটি কাজ করে। তবে Rect
একবারে আরও দুটি সংঘর্ষের কাজ করার সময় যখন এটি একের বেশি হয় তখন এটি সমস্যার কারণ হয়ে দাঁড়ায়।
সঠিকভাবে এটি মোকাবেলা করতে কোন ধারণা? আমি আমার সমস্যাটি দেখানোর জন্য ইউটিউবে একটি ভিডিও আপলোড করেছি। দূরে-ডানদিকে কনসোলটি ছেদগুলির প্রস্থ এবং উচ্চতা দেখায়। আপনি কনসোলে দেখতে পাচ্ছেন যে এটি একবারে 2 টি সংঘর্ষ গণনা করার চেষ্টা করছে, আমি মনে করি এটি এখানেই সমস্যা তৈরি হচ্ছে।
পরিশেষে, নীচের চিত্রটি আমার সমস্যাটি সুন্দরভাবে বর্ণনা করেছে বলে মনে হচ্ছে:
collider
বস্তু দ্বারা ফিরে this->getCollider()
দ্বারা আপডেট this->move()
??