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 ...
随机推荐
- 【日记】thinkphp项目阿里云ECS服务器部署
项目本地开发告一段落.准备上传到服务器上测试 技术组成 thinkphp+mysql+阿里ECS 代码管理方式git 一.阿里ECS服务器配置 1.因为线上已经有几个站点了.所以要配置ngnix多站 ...
- dubbox rest服务
1.xml配置: web.xml 定义监听的contextpath,见rest协议定义 <servlet> <servlet-name>dispatcher</servl ...
- 关于VPN的一些问题
在今在外出差,必须得连上公司的数据库,那就得使用VPN了,设置起来还算比较简单(我是win10), 简单介绍一下: 打开设置或者直接点击右下角的
- 编译osgEarth2.8遇到gdal_vrt.h找不到的问题
在编译plugins osgearth_gdal的ReaderWriterGDAL.cpp的时候可能会遇到这个问题 gdal_vrt.h这个头文件在gdal-1.11.0\frmts\vrt目录下,从 ...
- iOS监听tableView组头切换事件
- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSIntege ...
- mybatisGenerator 代码自动生成报错 Result Maps collection already contains value for BaseResultMap
这个错误基本都是mapper.xml有重复生成的代码
- 我的基于asp.net mvc5 +mysql+dapper+easyui 的Web开发框架(0)
前些日子工作不太忙,自己开发了一个web框架用于以后快速开发,现在分享出来. 系统没有使用各种复杂的东西,也没有太多的层次,有兴趣的可以研究一下.
- 【转载】 mysql explain用法
转载链接: mysql explain用法 官网说明: http://dev.mysql.com/doc/refman/5.7/en/explain-output.html 参数: htt ...
- JS--该死的&&和||
近段时间搞前端js,零零星星的看了一些框架源码,发现大量存在&&和||,其语法看的我是头冒青烟,也不知道怎么回事,度娘搜吧,现在写下来,以防忘掉. 先来约束一下用词:有一表达式A : ...
- 在IIS8.5的环境下配置WCF的Restful Service
今天在客户的环境中(Windows Server 2012 R2 + IIS 8.5)搭建Call WCF Restful Service的功能,发现了几个环境配置的问题,记录如下: 1):此环境先安 ...