加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

cocos2d-iphone – 如何在cocos2d中显示CCNode的边框?

发布时间:2020-12-14 17:30:10 所属栏目:百科 来源:网络整理
导读:作为我之前关于 displaying the anchor point的问题的后续问题,我将CCSprite子类化并更改了其绘制方法如下: [super draw];ccDrawColor4F(0,1,1);ccDrawCircle(self.anchorPointInPoints,20,8,YES); 这很好.为了额外的信用,我添加了以下内容来显示它的边框:
作为我之前关于 displaying the anchor point的问题的后续问题,我将CCSprite子类化并更改了其绘制方法如下:
[super draw];
ccDrawColor4F(0,1,1);
ccDrawCircle(self.anchorPointInPoints,20,8,YES);

这很好.为了额外的信用,我添加了以下内容来显示它的边框:

CGRect bb = self.boundingBox;
CGPoint vertices[4] = {
    [self convertToNodeSpace:ccp(bb.origin.x,bb.origin.y)],[self convertToNodeSpace:ccp(bb.origin.x + bb.size.width,bb.origin.y + bb.size.height)],[self convertToNodeSpace:ccp(bb.origin.x,};
ccDrawPoly(vertices,4,YES);

这也很好,直到我重申一个精灵:

CGPoint oldPosition = [sprite convertToWorldSpace:sprite.position];
[sprite removeFromParentAndCleanup:NO];
[parentSprite addChild:sprite];
sprite.position = [sprite convertToNodeSpace:oldPosition];

小精灵现在处于正确的位置,其定位点应该在哪里,但是边框将在错误的地方.我究竟做错了什么?

节点的边界框相对于其父节点.绘制方法绘制在节点的本地空间中. convertToNodeSpace:将坐标从世界空间转换为本地空间,而不是从父级空间转换.

当您将节点重新分配给具有不同来源的父节点,同时保持该节点的相同“世界”位置时,其边界框的起始点将更改.

你的错误是,你对待你的小精灵的边框,好像它的坐标在世界空间.

第二,你不需要做转换x空间的舞蹈来画一个精灵的边框.在项目的cocos2d文件夹中打开ccConfig.h文件并进行更改

#define CC_SPRITE_DEBUG_DRAW 0

行到

#define CC_SPRITE_DEBUG_DRAW 1

第三,sprite.position点的坐标是相对于它的父,而不是精灵.当您调用[node convertToWorldSpace:aPoint]时,它会将aPoint视为节点的本地空间.如果要获取节点位置的世界坐标,则应在节点的父节点上调用convertToWorldSpace:[node.parent convertToWorldSpace:node.position].

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读