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

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

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

显示面板的背景"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方法制作可显示三维数据(宠物三维等)的三角形显示面板的更多相关文章

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

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

  2. 浅谈C#泛型的定义、继承、方法和约束

    摘要:本文介绍了如何定义一个C#泛型类,以及实现泛型类的继承.方法和约束. C#泛型参数化了类型,把类型作为参数抽象出来,从而使我们在实际的运用当中能够更好的实现代码的重复利用,同时它提供了更强的类型 ...

  3. UIView封装动画--iOS 利用系统提供方法来做弹性运动

    iOS 利用系统提供方法来做弹性运动 /*创建弹性动画 damping:阻尼,范围0-1,阻尼越接近于0,弹性效果越明显 velocity:弹性复位的速度 */ [UIView animateWith ...

  4. View绘制详解(五),draw方法细节详解之View的滚动/滑动问题

    关于View绘制系列的文章已经完成了四篇了,前面四篇文章主要带小伙伴们熟悉一下View的体系的整体框架.View的测量以及布局等过程,从本篇博客开始,我们就来看看View的绘制过程.View的绘制涉及 ...

  5. Cocos2d-x 重写draw方法绘制直线等图形时被遮挡覆盖问题的一种解决方案

    最近在学习过程cocos2dx的过程中需要使用到绘制直线的功能,所以我就采用了引擎中 ccDrawLine 方法,然后重写 draw 方法,在该方法中绘制直线. 但是出现了一个问题,那就是绘制的图形被 ...

  6. jquery利用event.which方法获取键盘输入值的代码

    jquery利用event.which方法获取键盘输入值的代码,需要的朋友可以参考下. 实例 显示按了哪个键: $("input").keydown(function(event) ...

  7. C/S模式开发中如何利用WebBrowser控件制作导航窗体

    原文:C/S模式开发中如何利用WebBrowser控件制作导航窗体 转自: CSDN 相信不少同学们都做过MIS系统的开发,今天这里不讨论B/S模式开发的问题.来谈谈winform开发.用过市面上常见 ...

  8. 利用css+原生js制作简易钟表

    利用css+原生js制作简单的钟表.效果如下所示 实现该效果,分三大块:html.javascript.css html部分html部分比较简单,定义一个clock的div,内部有原点.时分秒针.日期 ...

  9. Spring boot入门(三):SpringBoot集成结合AdminLTE(Freemarker),利用generate自动生成代码,利用DataTable和PageHelper进行分页显示

    关于SpringBoot和PageHelper,前篇博客已经介绍过Spring boot入门(二):Spring boot集成MySql,Mybatis和PageHelper插件,前篇博客大致讲述了S ...

随机推荐

  1. gdb 调试多线程

    基本i threads 等操作略过,只谈线程同步.异步控制: 先点到,gdb attach到主线程t1 时,所有线程都会停止,所谓同步异步效果,是指在apply continue到所有线程之后, 再切 ...

  2. 聊一聊log4j2配置文件log4j2.xml

    一.背景 最近由于项目的需要,我们把log4j 1.x的版本全部迁移成log4j 2.x 的版本,那随之而来的slf4j整合log4j的配置(使用Slf4j集成Log4j2构建项目日志系统的完美解决方 ...

  3. windows下常查看端口占用方法总结

    启动Tomcat时又出现端口占用错误.现在把对端口的处理命令和方法进行汇总. 1.查看所有连接的PID 开始--运行--cmd  ,输入netstat -ano 找到端口号对应的PID后,从任务管理器 ...

  4. TO BUY

    // book 人月神话 // hardware 乐视.凯酷一生黑 HHKB 白无刻 Filco 奶酪绿 G600 // Book 重构 改善既有代码的设计 java与模式 人月神话(40周年中文纪念 ...

  5. 在c#中的TextBox响应回车键发出“咚”的一声解决方法

    在Win7系统的VS2012下的Form中,响应TextBox的KeyDown事件后,当按下回车键时发出"咚"的一声,百度后得到一下这样一个说法: 这是对于 windows 窗口标 ...

  6. scp 从远程服务器上一下载文件

    scp -P202 xx3.x6.xx.xx:/usr/local/zookeeper-.zip /tmp #指定远程服务器的端口和远程服务器的目标文件 ,最后指定要下载到本的地目录 也可以从远程服务 ...

  7. ASN.1 key structures in DER and PEM

    转自:https://tls.mbed.org/kb/cryptography/asn1-key-structures-in-der-and-pem Introduction Everybody lo ...

  8. 如何让include标签包裹的布局置于屏幕最下方?

    如何让一个Layout 始终在屏幕的下方 我想让<include layout="@layout/bottom" />一直在屏幕下,怎么做? 1.相对布局中用属性  a ...

  9. JS 原型链

    之前对JS的prototype知识比较模糊,今天理清了记下来,以防忘记,直切正题: 1.要明白原型链,就必须先清楚JS的构造函数模式: js是面向对象的语言,既然是面型对象,就一定会有一个对象的模板, ...

  10. 安装ganglia

    安装ganglia 1.默认已经配置好相关的主机名和Ip地址映射关系 2.默认已经安装好ssh密码登陆 3.默认已经配置好yum源和相关网络配置(如hosts 可在墙外) 4.服务器端安装(除了yum ...