cocos2dx 求角度怎么得到精灵的旋转角度

[cocos2d-x] 让精灵响应触摸 并把方向旋转到相对应的角度
在cocos2d-x里面 &想要把一个精灵从原位置移动到用户所触摸到的点 , 并且把精灵的方向旋转相对应的弧度,可以参考一下我的做法
我这里的精灵是用一条鱼, 用户触摸后鱼就移动到所触摸的点, 并且移动开始时鱼头的方向已经向着所触摸的点 下面是详细做法
首先 &h文件申明重写CCLayer里面的四个方法 :
& & virtualvoid registerWithTouchDispatcher(void);
& &virtualbool ccTouchBegan(CCTouch *pTouch,CCEvent *pEvent);
& &virtualvoid ccTouchMoved(CCTouch *pTouch,CCEvent *pEvent);
& &virtualvoid ccTouchEnded(CCTouch *pTouch,CCEvent *pEvent);
然后在cpp文件里面的init方法让当前图层实现触摸:&
this-&setTouchEnabled(true);
接着在cpp文件里重写的方法实现:
void StartGame::registerWithTouchDispatcher()
CCDirector::sharedDirector()-&getTouchDispatcher()-&addTargetedDelegate(this,INT_MIN-1,true);
bool StartGame::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent) {
CCPoint p=pTouch-&getLocation();
CCSprite * nowsprite=(CCSprite*)this-&getChildByTag(888);//根据tag获取我的精灵
nowsprite-&cocos2d::CCNode::setRotation(atan2((p.x-nowsprite-&getPositionX()),(p.y-nowsprite-&getPositionY()))*180/3.);//改变弧度 后面加不加90要根据精灵的初始角度是怎样的
CCMoveTo * move_ten =CCMoveTo::create(1, p); //设定移动所用的时间和坐标
nowsprite-&runAction(move_ten);
void StartGame::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent) {
CCPoint p=pTouch-&getLocation();
CCSprite * nowsprite=(CCSprite*)this-&getChildByTag(888);
nowsprite-&setPosition(p);
void StartGame::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)
//这里写结束触摸需要实现的功能cocos2dx(72)
定义:弧长为半径的狐,其所对的圆心角为1弧度。(两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段狐。当这段弧长正好等于圆的半径时,两条射线的夹角的弧度为1)
根据定义:一周的弧度为 2πr/r = 2π,360°角 = 2π弧度。
cocos2d里面顺时针方向为正,cocos2d以左下角为(0,0)点
要分清楚两个角度,1.物体旋转的角度2.两个点形成的直线和x的夹角&
求tan值的时候不要管正负都按正值算,再在在四个象限分别求物体旋
*****************************
double len_y = pos.y - start_pos.y;
double len_x = pos.x - start_pos.x;
double tan_yx = tan_yx = abs(len_y)/abs(len_x);
float angle = 0;
if(len_y & 0 && len_x & 0) {
angle = atan(tan_yx)*180/M_PI - 90;
} else if (len_y & 0 && len_x & 0) {
angle = 90 - atan(tan_yx)*180/M_PI;
} else if(len_y & 0 && len_x & 0) {
angle = -atan(tan_yx)*180/M_PI - 90;
} else if(len_y & 0 && len_x & 0) {
angle = atan(tan_yx)*180/M_PI + 90;
*****************************
原文连接:/wendao/archive//eng_cocos2dx_rotate_exploration.html
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:31577次
排名:千里之外
转载:68篇
(2)(3)(4)(4)(5)(15)(26)(15)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'COCOS2D中对精灵的操作、对图片的各种操作_西西软件资讯
西西软件园多重安全检测下载网站、值得信赖的软件下载站!
→ COCOS2D中对精灵的操作、对图片的各种操作
类型:文件处理大小:7.4M语言:中文 评分:6.6
于精灵的各种操作,总结一下以便以后复习查找。内容简要:1、初始化 2、创建无图的精灵 3、设置精灵贴图大小 &4、添加入层中5、对精灵进行缩放 &6、对精灵款或高进行缩放 &7、旋转精灵8、设置精灵透明度 &9、精灵的镜像反转 &10、设置精灵的颜色11、得到图的宽高 & 12、按照像素设定图片大小 &13、在原有的基础上加xy的坐标14、设置图片锚点 & &15、从新排列z轴顺序 & 16、更换精灵贴图17、设置可视区域 18、贴图无锯齿//初始化CCSprite* sprite =[CCSprite spriteWithFile:@&Icon.png&];&//创建无图的精灵CCSprite*sprite2 =[CCSprite node];//设置精灵贴图大小sprite2.textureRect=CGRectMake(0, 0, 20, 20);//设置其为宽20,高20.//添加入层中[self addChild:sprite&z:2]; //将精灵加入层中设置其z轴为2//对精灵进行缩放sprite.scale=2;//放大2倍//对精灵款或高进行缩放sprite.scaleX = 2;//宽放大2倍&sprite.scaleY = 2;//高放大2倍//旋转精灵sprite.rotation=90;//旋转90度//设置精灵透明度sprite.opacity=255;//设置透明度为完全不透明(范围0~255)//定义精灵位置sprite.position=ccp(100,100);//设置精灵中心点坐标是x=100,y=100//精灵的镜像反转[sprite setFlipX:YES];//X轴镜像反转[sprite setFlipY:YES];//Y轴镜像反转//设置精灵的颜色[sprite setColor:ccc3(255, 0, 0)];//设置颜色为红色//得到图的宽高float &contentSize&&=&sprite&.contentSize.width //得到图片的宽高//按照像素设定图片大小sprite.scaleX=(20)/contentS //按照像素定制图片宽高//在原有的基础上加xy的坐标sprite.position = ccpAdd(sprite.position,ccp(20,20));//在原有坐标的基础上加减坐标//设置图片锚点[sprite&setAnchorPoint:ccp(0.5,0.5)&];//设置图片的锚点//从新排列z轴顺序[self reorderChild:sprite z:1];//从新排列z轴顺序//更换精灵贴图CCTexture2D * =[[CCTextureCache sharedTextureCache] addImage: @&test.png&];//新建贴图[sprite&setTexture:test];&//更换精灵贴图,加载帧缓存,这个test.plist保存了fram这张图[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@&test.plist&];CCSpriteFrame* frame = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@&fram.png&];[sprite2 setDisplayFrame:frame];//设置可视区域CCSprite * sprite3 =[CCSprite spriteWithFile:@&icon.png& rect:CGRectMake(0, 0, 20,20)];//创建时设置[sprite3 setTextureRect:CGRectMake(10, 10, 30, 30)];//创建后设置//贴图无锯齿[sprite3&.texture setAliasTexParameters];
11-0408-1805-1206-0410-1905-1101-2201-2101-1701-13
阅读本文后您有什么感想? 已有23人给出评价!
名称大小下载cocos2dx(8)
最近在玩部落冲突,看到其中有一种比较好的讲解角色技能的展现方式,就是在角色的那个图标某个角角上,例如右上角,有一个感叹号的图标,点击就可以弹出相关的信息介绍弹窗,这种展现方式比较节省空间,也直接,于是考虑了一下实现方式,由此引申出本文要讨论的一些问题。
其实实现这样的呈现方式最主要的问题就是在于怎样找到图标的右上角,很直接的一个想法就是,首先我们可以获得图标的位置,然后计算出这个感叹号的位置,我们可以列举出这样一个计算公式:
假设图标的位置为pos(x1,y1),图标的大小为高h1,宽w1,感叹号图标的高为h2,宽w2,则感叹号图标的纵坐标为:
y2 = y1 + h1/2 - h2/2
这里我们默认描点在图标中心,先减去图标自身二分之一的高度,使位置到图标的最上端,如果使用这个位置,将导致感叹号图标的超出图标的感叹号图标高度的一半,因为描点在中心,所以我们再减去这个部分,就可以设置好高度。
同理,横坐标可以根据如下公式计算得到:
x2 = x1 + w1/2 - w2/2
有了这样的计算公式,接下来我们的问题就是如果获得精灵的长宽。
我们先看看第一种方案,cocos2dx给我们提供了这样一个函数:getContentSize(),通过这个函数我们可以获得精灵原始的长宽,这里为什么要说原始,因为我们在使用精灵的时候经常会对其进行缩放操作,当发生缩放操作后,这个函数返回的值就失效了,如果要进行修正也比较简单,将getContentSize()获得的高度和宽度乘以精灵的缩放系数就可以了。
第二种方案我没有进行过测试,不过理论上是可以的,cocos2dx中有boundingBox 这个函数所获得的,就是精灵缩放后的大小了,后面我也会进行测试,大家也可以试试。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:14715次
排名:千里之外
原创:11篇
(1)(1)(3)(3)(3)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 cocos2dx 两点角度 的文章

 

随机推荐