很久没有写博客了,这段时间比较忙,又是搬家又是做自己的项目,还有太多琐碎的事情缠身,好不容易抽出时间把最近自己做的一些简单例子记录一下。

在我的项目中,我需要一个显示面板来显示游戏中的一个三维数据,例如,力量,速度,耐力,来直观的显示出物体的特征,让玩家能够一眼看出区别

首先我们需要准备一下素材

显示面板的背景"Panel.png",比如:尽量能够以三角形为背景

1- 新建一个继承自CCSprite的类,命名为CCPanel

2- 在头文件中添加

@interface ZOPanel : CCSprite
{id<ZOPanelDataSource> s_dataSource;
}
- (id)initWithDataSource:(id<ZOPanelDataSource>)dataSource;
+ (id)panelWithDataSource:(id<ZOPanelDataSource>)dataSource;
@end

这里我们需要利用代理的方式,来传入面板所需要显示的值,这样我们就能在不同的类中使用到这个面板,而不需要重新修改代码

初始化方法中,需要设置一个代理,这里作为数据库的作用

接着我们需要完成这个代理的协议,在前面添加代码:

@protocol ZOPanelDataSource <NSObject>
@required
@property (nonatomic, readonly) float Power;
@property (nonatomic, readonly) float Speed;
@property (nonatomic, readonly) float Endurance;;
@end
// before @interface

这段代码申明了ZOPanelDataSource需要实现3个属性,分别为Power,Speed,Endurance

ZOPanel将会根据ZOPanelDataSource的3个属性,自动更新面板显示的数据

3- 在实现文件中实现初始化方法

@implementation ZOPanel- (id)initWithDataSource:(id<ZOPanelDataSource>)dataSource;
{self = [super initWithSpriteFrameName:@"Panel.png"];if (self) {s_dataSource = dataSource;}return self;
}+ (id)panelWithDataSource:(id<ZOPanelDataSource>)dataSource;
{return [[[self alloc] initWithDataSource:dataSource] autorelease];
}

4- 继承Draw方法来绘制三角形,在初始化方法后添加以下代码:

- (void)draw
{[super draw];//draw 方法是CCNode用来绘制自身显示内容的方法,将会在每个最小时间间隔dt内不断更新,一般要在CCNode中自己绘制点,线,面,都需要继承原来的draw方法,在之后添加自定义的绘制代码if (s_dataSource) {float power = s_dataSource.Power;//读取数据库Power属性float speed = s_dataSource.Speed;//读取数据库Speed属性float endurance = s_dataSource.Endurance;//读取数据库Endurance属性
ccDrawColor4F(0, 0, 0, 1);//设置OpenGL绘制图像的颜色为R:0,B:0,G:0,A:1CGPoint center = ccpAdd(self.anchorPointInPoints, ccp(0,-2));//计算绘制三角形的中心位置,在我的例子中为背景图像的中心向Y轴负方向移动2个像素,根据不同的背景图像,需要重新计算float redRotation = 90;//红色三角形定点的角度CGPoint powerDirection = ccpForAngle(CC_DEGREES_TO_RADIANS(redRotation));CGPoint speedDirection = ccpForAngle(CC_DEGREES_TO_RADIANS(redRotation + 120));CGPoint enduranceDirection = ccpForAngle(CC_DEGREES_TO_RADIANS(redRotation + 240));CGPoint powerPoint = ccpAdd(center, ccpMult(powerDirection, 1 + power * 15 / 50));//计算出Power顶点CGPoint speedPoint = ccpAdd(center, ccpMult(speedDirection, 1 + speed * 15 / 50));//计算出Speed顶点CGPoint endurancePoint = ccpAdd(center, ccpMult(enduranceDirection, 1 + endurance * 15 / 50));//计算出Endurance顶点CGPoint points[] = {powerPoint,speedPoint,endurancePoint};ccDrawSolidPoly(points, 3, ccc4FFromccc3B(ccBLACK));//调用Cocos2d的绘制方法,绘制一个黑色实心三角形
}

至此一个简单的三角形显示控件完成

使用起来也非常简单,在任何一个CCNode实现中,添加代码

#import "ZOPanel.h"{ZOPanel *panel = [ZOPanel panelWithDataSource:self];[self addchild:panel];
}//实现数据库代理
- (float)Power
{reture 0;
}- (float)Speed
{reture 0;
}- (float)Endurance
{reture 0;
}

最终效果如下,希望能够对大家有帮助

转载于:https://www.cnblogs.com/sawyerzhu/p/3248090.html

Cocos2d 利用继承Draw方法制作可显示三维数据(宠物三维等)的三角形显示面板...相关推荐

  1. matlab 三维立体图,利用matlab将三维数据画成三维立体图

    利用matlab将三维数据画成三维立体图 发布时间:2018-08-20 14:13, 浏览次数:1367 , 标签: matlab 首先先分析对象.将数据利用matlab画出图,最开始是导入数据,然 ...

  2. 利用matlab将三维数据画成三维立体图

    1.序言 三维立体图看起来美观,在很多研究中常使用三维立体图进行展示. 2.使用的数据和方法 通过查询网上的资料,自己改写程序,整理写成了matlab读取excel数据,画三维图. (1)参考程序 c ...

  3. 数据分析利用pyechart套模版制作图片,解决数据轻松出图!

    pyechart 官网地址:pyecharts - A Python Echarts Plotting Library built with love. 柱状图: from pyecharts.cha ...

  4. Winform打砖块游戏制作step by step第5节---重构代码,利用继承多态

    一 引子 为了让更多的编程初学者,轻松愉快地掌握面向对象的思考方法,对象继承和多态的妙用,故推出此系列随笔,还望大家多多支持. 二 本节内容---重构代码,利用继承多态 1. 主界面截图如下: 2.  ...

  5. 利用WPS 2013文字制作精美的信纸的方法

    一份好看的信纸能令你的文字更加多姿多彩,一份合适的信纸能令你的文案更加专业.掌握以下三步,你也可以用WPS 2013文字制作出自己独一无二的信纸! 第一步:设置文档并插入图片; 首先,新建空白文档,默 ...

  6. fedora利用vmlinuz和initrd制作linux启动u盘,fedora 14 livecd从U盘启动安装方法

    首先本文所说的不是利用fedora写U盘工具及其他工具实现从U盘启动fedora 14 livecd,本文所说的是利用grub启动方法启动到fedora 14 livecd. 先啰嗦几句. 本人前几天 ...

  7. 利用计算机辅助设计,一种利用计算机辅助设计和制作手工栽绒毯的方法

    一种利用计算机辅助设计和制作手工栽绒毯的方法 [技术领域] [0001]本发明属于手工栽绒毯的设计制作领域,特别涉及一种利用计算机辅助设计和制作手工栽绒毯的方法. [背景技术] [0002]手工栽绒毯 ...

  8. android电视设置hdmi输出,利用HDMI线实现多屏显示的设置方法!

    原标题:利用HDMI线实现多屏显示的设置方法! 利用HDMI线实现多屏显示的设置方法!下面从2个方面进行说明,具体的由HDMI线厂家怡万达电子为你分析介绍. 1.HDMI线接电视设置方法,如何设置多屏 ...

  9. 数据可视化:利用Python和Echarts制作“用户消费行为分析”可视化大屏

    数据可视化:利用Python和Echarts制作"用户消费行为分析"可视化大屏 前言 实验目的: 准备工作: 一.创建项目: 二.建立数据库连接获取数据: 三.页面布局: 四.下载 ...

  10. 利用js和jquary制作轮播图

    1 问题 我们在浏览淘宝或者京东等其他网页时,可以发现,在它们的首页有一个方框,里面的图片是自动播放的.而今天就是利用js和jquary制作这种具有轮播效果的图片. 2 方法 首先使用<div& ...

最新文章

  1. 从一个死锁看mysql innodb的锁机制
  2. java 坦克重叠_坦克大战中坦克一直有重叠是怎么回事
  3. Asp.Net SignalR 集线器不使用代理的实现
  4. “【第二届】Erlang Fans交流会”议程
  5. python统计图像直方图_计算机视觉7-像素点直方图统计、掩膜图像
  6. J2ME程序员容易遇到的问题!不断更新中_2008.05.17
  7. CCF NOI1072 爬楼梯
  8. 札记:android手势识别,MotionEvent
  9. 454.四数相加II
  10. asp.net天轰穿视频学习总结
  11. Pycharm中英文语言切换以及背景色更改问题
  12. 电脑图片打不开并且显示没有注册类怎么办?
  13. Cousera - Deep Learning - 课程笔记 - Week 5
  14. unpivot行转列 oracle,oracle-行转列点评oracle11g sql新功能pivot/unpivot
  15. Postgresql - cursor介绍
  16. 133、H3C交换机恢复出厂和各种基本配置
  17. Ucenter通信失败(终极解决)
  18. 【思路整理】凑数问题
  19. Apple 的 WWDC 2022 活动时间以及观看方法
  20. Java Statement一次执行多条sql语句

热门文章

  1. 哈尔滨举办冰雪动漫节 coser演绎《王者荣耀》英雄
  2. JS推断浏览器类型与版本号
  3. ZLYZD团队第四周项目总结
  4. PyTips 0x14 - Python 描述符
  5. django 学习个人总结 之many_to_one
  6. jsp无法提交nicEdit中的内容的解决办法
  7. Google 浏览器(2011)书签同步
  8. pandas.Series.values
  9. php中的钩子理解及应用
  10. TCP的几个状态对于我们分析所起的作用SYN, FIN, ACK, PSH,