Cocos2d 利用继承Draw方法制作可显示三维数据(宠物三维等)的三角形显示面板
很久没有写博客了,这段时间比较忙,又是搬家又是做自己的项目,还有太多琐碎的事情缠身,好不容易抽出时间把最近自己做的一些简单例子记录一下。
在我的项目中,我需要一个显示面板来显示游戏中的一个三维数据,例如,力量,速度,耐力,来直观的显示出物体的特征,让玩家能够一眼看出区别
首先我们需要准备一下素材
显示面板的背景"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(, , , );//设置OpenGL绘制图像的颜色为R:0,B:0,G:0,A:1
CGPoint center = ccpAdd(self.anchorPointInPoints, ccp(,-));//计算绘制三角形的中心位置,在我的例子中为背景图像的中心向Y轴负方向移动2个像素,根据不同的背景图像,需要重新计算
float redRotation = ;//红色三角形定点的角度
CGPoint powerDirection = ccpForAngle(CC_DEGREES_TO_RADIANS(redRotation));
CGPoint speedDirection = ccpForAngle(CC_DEGREES_TO_RADIANS(redRotation + ));
CGPoint enduranceDirection = ccpForAngle(CC_DEGREES_TO_RADIANS(redRotation + )); CGPoint powerPoint = ccpAdd(center, ccpMult(powerDirection, + power * / ));//计算出Power顶点
CGPoint speedPoint = ccpAdd(center, ccpMult(speedDirection, + speed * / ));//计算出Speed顶点
CGPoint endurancePoint = ccpAdd(center, ccpMult(enduranceDirection, + endurance * / ));//计算出Endurance顶点
CGPoint points[] = {
powerPoint,
speedPoint,
endurancePoint
};
ccDrawSolidPoly(points, , ccc4FFromccc3B(ccBLACK));//调用Cocos2d的绘制方法,绘制一个黑色实心三角形
}
至此一个简单的三角形显示控件完成
使用起来也非常简单,在任何一个CCNode实现中,添加代码
#import "ZOPanel.h"
{
ZOPanel *panel = [ZOPanel panelWithDataSource:self];
[self addchild:panel];
}
//实现数据库代理
- (float)Power
{
reture ;
}
- (float)Speed
{
reture ;
}
- (float)Endurance
{
reture ;
}
最终效果如下,希望能够对大家有帮助

Cocos2d 利用继承Draw方法制作可显示三维数据(宠物三维等)的三角形显示面板的更多相关文章
- Winform打砖块游戏制作step by step第5节---重构代码,利用继承多态
一 引子 为了让更多的编程初学者,轻松愉快地掌握面向对象的思考方法,对象继承和多态的妙用,故推出此系列随笔,还望大家多多支持. 二 本节内容---重构代码,利用继承多态 1. 主界面截图如下: 2. ...
- 浅谈C#泛型的定义、继承、方法和约束
摘要:本文介绍了如何定义一个C#泛型类,以及实现泛型类的继承.方法和约束. C#泛型参数化了类型,把类型作为参数抽象出来,从而使我们在实际的运用当中能够更好的实现代码的重复利用,同时它提供了更强的类型 ...
- UIView封装动画--iOS 利用系统提供方法来做弹性运动
iOS 利用系统提供方法来做弹性运动 /*创建弹性动画 damping:阻尼,范围0-1,阻尼越接近于0,弹性效果越明显 velocity:弹性复位的速度 */ [UIView animateWith ...
- View绘制详解(五),draw方法细节详解之View的滚动/滑动问题
关于View绘制系列的文章已经完成了四篇了,前面四篇文章主要带小伙伴们熟悉一下View的体系的整体框架.View的测量以及布局等过程,从本篇博客开始,我们就来看看View的绘制过程.View的绘制涉及 ...
- Cocos2d-x 重写draw方法绘制直线等图形时被遮挡覆盖问题的一种解决方案
最近在学习过程cocos2dx的过程中需要使用到绘制直线的功能,所以我就采用了引擎中 ccDrawLine 方法,然后重写 draw 方法,在该方法中绘制直线. 但是出现了一个问题,那就是绘制的图形被 ...
- jquery利用event.which方法获取键盘输入值的代码
jquery利用event.which方法获取键盘输入值的代码,需要的朋友可以参考下. 实例 显示按了哪个键: $("input").keydown(function(event) ...
- C/S模式开发中如何利用WebBrowser控件制作导航窗体
原文:C/S模式开发中如何利用WebBrowser控件制作导航窗体 转自: CSDN 相信不少同学们都做过MIS系统的开发,今天这里不讨论B/S模式开发的问题.来谈谈winform开发.用过市面上常见 ...
- 利用css+原生js制作简易钟表
利用css+原生js制作简单的钟表.效果如下所示 实现该效果,分三大块:html.javascript.css html部分html部分比较简单,定义一个clock的div,内部有原点.时分秒针.日期 ...
- Spring boot入门(三):SpringBoot集成结合AdminLTE(Freemarker),利用generate自动生成代码,利用DataTable和PageHelper进行分页显示
关于SpringBoot和PageHelper,前篇博客已经介绍过Spring boot入门(二):Spring boot集成MySql,Mybatis和PageHelper插件,前篇博客大致讲述了S ...
随机推荐
- appium实现截图和清空EditText
前些日子,配置好了appium测试环境,至于环境怎么搭建,参考:http://www.cnblogs.com/tobecrazy/p/4562199.html 知乎Android客户端登陆:htt ...
- Eclipce结合Ant进行编译、打包、传输、运行
注意: 用Ant构建时,build path只能是单级的,如默认的src,如果是类似basePath/jsr253这样的话,运行Ant build时会报错,说找不到jsr253. (此文讲述的是以an ...
- js中JSON格式数据的转化
JSON.parse(STRING) => OBJECT JSON.stringify(OBJECT) => STRING
- jquery 双向select控件bootstrap Dual listbox
http://www.cnblogs.com/hangwei/p/5040866.html -->jquery 双向select控件bootstrap Dual listboxhtt ...
- GridBagConstraints 参数解释
GridBagConstraints 的具体参考为: http://download.oracle.com/technetwork/java/javase/6/docs/zh/api/java/awt ...
- APM程序分析-AC_WPNav.cpp
APM程序分析 主程序在ArduCopter.cpp的loop()函数. /// advance_wp_target_along_track - move target location along ...
- 如何清除Xcode8打印的系统日志
Xcode升级成8之后,就会发现控制台打印的日志莫名其妙的变得超级多,最关键的是很多都是没有用的东西,而有些有用的东西却淹没在那无任何卵用的里面,在这我就说一下如何关掉这些没有用的日志. 1.直接快捷 ...
- 【Java EE 学习 67 上】【OA项目练习】【JBPM工作流的使用】
OA项目中有极大可能性使用到JBPM框架解决流程控制问题,比如请假流程.报销流程等等. JBPM:JBoss Business Process Management,翻译过来就是业务流程管理.实际上就 ...
- npm设计代理
概述: 在需要代理才能上网的环境下,需要给npm设置代理才能完成安装 npm install 代理设置: 直接使用npm install会报错,如下: npm ERR! node v6.7.0 np ...
- 用goto做异常处理
http://www.cnblogs.com/trying/archive/2012/06/25/2863753.html 今天在CSDN上看到的关于错误返回值的讨论,感觉非常有趣. 从中可以看出被教 ...