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

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

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

显示面板的背景"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. 【日记】thinkphp项目阿里云ECS服务器部署

    项目本地开发告一段落.准备上传到服务器上测试 技术组成 thinkphp+mysql+阿里ECS  代码管理方式git 一.阿里ECS服务器配置 1.因为线上已经有几个站点了.所以要配置ngnix多站 ...

  2. dubbox rest服务

    1.xml配置: web.xml 定义监听的contextpath,见rest协议定义 <servlet> <servlet-name>dispatcher</servl ...

  3. 关于VPN的一些问题

    在今在外出差,必须得连上公司的数据库,那就得使用VPN了,设置起来还算比较简单(我是win10), 简单介绍一下: 打开设置或者直接点击右下角的

  4. 编译osgEarth2.8遇到gdal_vrt.h找不到的问题

    在编译plugins osgearth_gdal的ReaderWriterGDAL.cpp的时候可能会遇到这个问题 gdal_vrt.h这个头文件在gdal-1.11.0\frmts\vrt目录下,从 ...

  5. iOS监听tableView组头切换事件

    - (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSIntege ...

  6. mybatisGenerator 代码自动生成报错 Result Maps collection already contains value for BaseResultMap

    这个错误基本都是mapper.xml有重复生成的代码

  7. 我的基于asp.net mvc5 +mysql+dapper+easyui 的Web开发框架(0)

    前些日子工作不太忙,自己开发了一个web框架用于以后快速开发,现在分享出来. 系统没有使用各种复杂的东西,也没有太多的层次,有兴趣的可以研究一下.

  8. 【转载】 mysql explain用法

    转载链接:  mysql explain用法 官网说明:     http://dev.mysql.com/doc/refman/5.7/en/explain-output.html 参数:  htt ...

  9. JS--该死的&&和||

    近段时间搞前端js,零零星星的看了一些框架源码,发现大量存在&&和||,其语法看的我是头冒青烟,也不知道怎么回事,度娘搜吧,现在写下来,以防忘掉. 先来约束一下用词:有一表达式A : ...

  10. 在IIS8.5的环境下配置WCF的Restful Service

    今天在客户的环境中(Windows Server 2012 R2 + IIS 8.5)搭建Call WCF Restful Service的功能,发现了几个环境配置的问题,记录如下: 1):此环境先安 ...