大佬教程收集整理的这篇文章主要介绍了cocos2dx 碰撞检测,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_618_1@//用平台封装的函数进行碰撞检测
//将砖块精灵放入一个数组(容器)之中然后一 一进行碰撞检测
bool Mymap::isCollideWithHeroX()
for(auto x:road)
if(x->boundingBox().intersectsRect(myHero->getSprite()->boundingBox())) //boundingBox().intersectsRect()这个函数获取的是精灵的标准矩形,如果要更精确的检测可以自己获取一个不规则多边形进行检测
return true;
}
}
return false;
}
//网上学习
检测矩形与矩形碰撞的函数:
bool intersectsRect(const cCRect &rect) 使用方法: rect1.intersectsRect(rect2);
检测点与矩形碰撞的函数: bool containsPoint(const cCPoint &point) 使用方法: rect.containsPoint(point);
下面重点说矩形与圆形的碰撞检测: PS:先说一下cocos2d-x中的矩形Rect,Rect的构造有四个参数,x,y,width,height,如下图所示
//
// CGCircle.h
// HelloCpp
// Created by Mike on 14-1-16.
//
#ifndef __HelloCpp__CGCircle__
#define __HelloCpp__CGCircle__
#include <iostream>
#include
"cocos2d.h"
using namespace std;
using namespace cocos2d;
class
CGCircle
private
:
//float _radius; //半径
//Point _position; //圆心
public
CC_SYNTHESIZE(
float
,_radius,Radius);
CC_SYNTHESIZE(Point,_position,Position);
CGCircle(
radius,Point position): _radius(radius),_position(position){};
bool isContainRect(Rect rect);
};
#endif
/* defined(__HelloCpp__CGCircle__) */
</iostream>
// CGCircle.cpp
"CGCircle.h"
bool CGCircle::isContainRect(Rect rect)
bool _isContian =
false
;
Point orign = _position;
//圆心,新建坐标系的原点
//圆的外切正方形 Rect(x,heigth) x,y是原点,左下顶点
Rect square = Rect::rect(_position.x - _radius,_position.y - _radius,
2
* _radius,
* _radius);
do
Point rectVertex0 = rect.origin;
//左下
Point rectVertex1 = rect.origin + Point(rect.size.width,0);BACkground-color:inherit;">0
);
//右下
Point rectVertex2 = rect.origin + Point(rect.size.width,rect.size.height);
//右上
Point rectVertex3 = rect.origin + Point(
//左上
Point pos[] = {rectVertex0,rectVertex1,rectVertex2,rectVertex3};
if
((pos[
1
].x - orign.X) * (pos[
3
].x - orign.X) >
&&
(pos[
].y - orign.y) * (pos[
].y - orign.y) >
)
//右下顶点和左上顶点在同一象限,说明整个矩形位于一个象限内 若各顶点至少有一个在圆内则相交
for
(
int
i =
; i <
4
; i++) {
//判断矩形四个顶点是否至少有一个位于圆内
(((pos[i].x - orign.X) * (pos[i].x - orign.X)
+ (pos[i].y - orign.y) * (pos[i].y - orign.y))
<= _radius * _radius)
goto
next;
}
(square.intersectsRect(rect)) {
(pos[i] == orign) {
break
next:
_isContian =
true
}
while
);
return
_isContian;
Size visibleSize = Director::geTinstance()->getVisibleSize();
auto circleS = Sprite::create(
"circle.png"
circleS->setPosition(Point(visibleSize.width/
));
this
->addChild(circleS,monospace;font-size:1em;line-height:1.1em;BACkground-color:inherit;">auto rectS = Sprite::create(
"rect.png"
rectS->setPosition(Point(circleS->getPositionX() -
100
);
->addChild(rectS,monospace;font-size:1em;line-height:1.1em;BACkground-color:inherit;">CGCircle circle0 = CGCircle(circleS->getContentSize().width/
);
Rect rect0 = Rect(rectS->getPositionX() - rectS->getContentSize().width/
rectS->getPositionY() - rectS->getContentSize().height/
rectS->getContentSize().width,rectS->getContentSize().height);
(circle0.isContainRect(rect0)) {
CCLOG(
"circleS与rectS碰撞了"
else
"circleS与rectS未碰撞"
radius =
30.0
Point position = Point(
300
CGCircle circle = CGCircle(radius,position);
Rect rect1 = Rect(
280
290
10
30
(circle.isContainRect(rect1))
"矩形1与圆碰撞了"
Rect rect2 = Rect(
210
(! circle.isContainRect(rect2))
"矩形2与圆未碰撞"
s.width=650;" src="http://img.voidcn.com/vcimg/static/loading.png" style="BACkground:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" data-src="http://cxdbk.blog.51cto.come/u261/themes/default/images/spacer.gif">
s.width=650;" src="http://img.voidcn.com/vcimg/static/loading.png" style="BACkground:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" data-src="http://cxdbk.blog.51cto.come/u261/themes/default/images/spacer.gif">
以上是大佬教程为你收集整理的cocos2dx 碰撞检测全部内容,希望文章能够帮你解决cocos2dx 碰撞检测所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。