cocos2d-html5版日历组件
根据一as3版本给改编成成了js版的。as3版本的地址: http://download.csdn.net/detail/fengye513/2722289
胜利项目做的差不多了,由于项目用的是c++,并没有动态更新逻辑的需求,所以也就没有写什么js或者lua脚本,全部c++,涉及到付费或者分享之类特殊处理,objc和java还是写了不少。话不多说,现在游戏里增加了一个会不定期更新的活动模块,逻辑部分和UI部分都会实事改动,一开始想要写lua,但是由于引擎版本差异,引擎代码被改动过等原因,放弃了lua binding的方式,于是就用到了webView这个东东,直接嵌入页面到游戏中,搞定了objc与js互调,java与js互调之后,利用cocosx-html5引擎开些了。
活动嘛,少不了签到,签到,肯定是在日历上签咯。
共三个类,类名没怎么改,还是用as那老兄的命名
DayObject :日历上每一天的数据
DateShape : 日历上每一天的视图
SuperCalendar : 日历容器 new一个SuperCalendar并addChild到你想要它出现的地方,然后调用setData()方法传递年,月,日,就可以了,
支持跳月,跳年就没写了,如果你需要的话可以看看原本的as代码里有。
上代码:
/**
* @anthor JiaDing
*
*/ var DayObject = cc.Class.extend({ innerText:null,//几号
isToady:false,//是否是当天
isMark:false,//是否签到 init:function ()
{ return true; } }); DayObject.create = function()
{
var obj = new DayObject();
if(obj && obj.init())
{
return obj;
}
return null;
};
/**
* @anthor JiaDing
*
*/ var DateShape = cc.Sprite.extend({ _label:null,
_lis:null,
_Obj:null, init:function (val)
{
var ready = false;
if (this._super())
{
// winSize = cc.Director.getInstance().getWinSize(); this._lis = [];
this._Obj = val; var markInfo = null;
if(this._Obj.isMark)
{
markInfo = "(已签)";
}
else
{
markInfo = "(未签)";
}
this._label = cc.LabelTTF.create(this._Obj.innerText+markInfo, "Arial", 25); if(this._Obj.isToady)
{
this._label.setColor(cc.c3b(255,0,0));
}
else
{
this._label.setColor(cc.c3b(255,255,255));
} this.addChild(this._label); ready = true;
}
return ready; } }); DateShape.create = function(val)
{
var shape = new DateShape();
if(shape && shape.init(val))
{
return shape;
}
return null;
}; DateShape.prototype.remove = function()
{
this.removeAllChildren(true);
this._label = null;
this._lis = null; }
/**
* @anthor JiaDing
*
*/ var SuperCalendar = cc.Layer.extend({ daysMonth:null,
thisYear:0,
thisMonth:0,
thisDay:0,
day:null,
dayObj:null,
dateSprite:null, inputDate:null,
today:null,
todayTitleInfo:null, init:function ()
{
var bRet = false;
if (this._super())
{ this.daysMonth = [31,28,31,30,31,30,31,31,30,31,30,31];//正常的月份日期
this.day = new Array(42);
this.dayObj = new Array(42); bRet = true;
}
return bRet; },
setData:function(y,m,d)
{
this.thisYear = y;
this.thisMonth = m;
this.thisDay = d;
this.today = this.thisYear + "-" + this.thisMonth + "-" + this.thisDay;
this.updateCalendar();
},
updateCalendar:function ()
{
if(this.dateSprite != null)
{
this.dateSprite.removeAllChildren(true);
this.removeChild(this.dateSprite);
this.dateSprite = null;
}
var iRemove=0;
// document.write(this.dateSprite);
if(this.dateSprite == null)
{
this.dateSprite = cc.Sprite.create();
this.addChild(this.dateSprite);
} var y = this.thisYear;
var m = this.thisMonth;
var d = this.thisDay; if(!(y <= 9999 && y >= 1000 && m > 0 && m < 13 && d > 0)){
//日期初始化
this.thisYear = 2013
this.thisMonth = 7;
this.thisDay = 10;
} this.todayTitleInfo = this.thisYear + "年 " + this.thisMonth + "月"; y = this.thisYear;
m = this.thisMonth;
d = this.thisDay;
this.daysMonth[1] = (0 == y%4 &&(y%100!=0 || y%400==0)) ? 29:28;
var w = new Date(y,m-1,1).getDay(); var prevDays = m==1? this.daysMonth[11] : this.daysMonth[m-2];
var i;
for(i=(w-1);i >= 0;i--){
this.day[i] = y + "-" + (m-1) + "-" + prevDays;
if(m == 1){
this.day[i] = (y-1) + "-" + 12 + "-" + prevDays;
}
prevDays--;
}
for(i=1;i <= this.daysMonth[m-1];i++){
this.day[i+w-1] = y + "-" + m + "-" + i;
}
for(i=1;i<42-w-this.daysMonth[m-1]+1;i++){
this.day[this.daysMonth[m-1]+w-1+i] = y + "-" + (m+1) + "-" + i;
if(m==12){
this.day[this.daysMonth[m-1]+w-1+i] = (y+1) + "-" + 1 + "-" + i;
}
} for(i=0;i<42;i++)
{
var a = this.day[i].split("-");
this.dayObj[i] = DayObject.create();
this.dayObj[i].innerText = a[2];
this.dayObj[i].isToady = false; //非本月份,不显示日期
if(i < w)
{
continue;
}
if(i >= w+this.daysMonth[m-1])
{
continue;
} //今天日期
if(this.day[i] == this.today)
{
this.dayObj[i].isToady = true;
} var dateShape = DateShape.create(this.dayObj[i]);
dateShape.setPositionX((i % 7) * 115);
//cocos2d的世界里越往下y越小,所以要(6-i)
dateShape.setPositionY( Math.floor((6-i) / 7) * 40 ); this.dateSprite.addChild(dateShape); }
},
jumpToPrevMonth:function()
{
this.thisDay = 1;
if(this.thisMonth == 1)
{
this.thisYear--;
this.thisMonth = 13;
}
this.thisMonth--;
this.updateCalendar();
},
jumpToNextMonth:function()
{
this.thisDay = 1;
if(this.thisMonth == 12)
{
this.thisYear++;
this.thisMonth = 0;
}
this.thisMonth++;
this.updateCalendar();
},
jumpToToday:function()
{
this.thisYear = 2013;
this.thisMonth = 7;
this.thisDay = 10;
this.today = this.thisYear + "-" + this.thisMonth + "-" + this.thisDay; //今天("yyyy-dd-mm")
this.updateCalendar();
}
}); SuperCalendar.create = function()
{
var layer = new SuperCalendar();
if(layer && layer.init())
{
return layer;
}
return null;
};
cocos2d-html5版日历组件的更多相关文章
- jmgraph前端画图组件(html5版)
原文:jmgraph前端画图组件(html5版) jmgraph是一个基于html5的WEB前端画图组件. 前端画图对象控件化,支持鼠标和健盘事件响应,可对单个控件样式设定,支 ...
- HTML5版的String Avoider小游戏
HTML5版的String Avoider小游戏 http://www.newgrounds.com/portal/view/300760 蛮简单也蛮考验耐心,从游戏起始点移动鼠标到终点位置,鼠标移动 ...
- 9款精致HTML5/jQuery日历时钟控件源码下载(源码请见百度云) 链接:http://pan.baidu.com/s/1geIXe75 密码:7m4a
现在的网页应用越来越丰富,我们在网页中填写日期和时间已经再也不用手动输入了,而是使用各种各样的日期时间选择控件,大部分样式华丽的日期选择和日历控件都是基于jQuery和HTML5的,比如今天要分享的这 ...
- input的type属性引申的日历组件
HTML5规范里只规定date新型input输入类型,并没有规定日历弹出框的实现和样式.所以,各浏览器根据自己的设计实现日历.目前只有谷歌浏览器完全实现日历功能.相信这种局面很快就会结束,所有的浏览器 ...
- 基于Vue2-Calendar改进的日历组件(含中文使用说明)
一,前言 我是刚学Vue的菜鸟,在使用过程中需要用到日历控件,由于项目中原来是用jQuery写的,因此用了bootstarp的日历控件,但是配合Vue实在有点蛋疼,不够优雅…… 于是网上搜了好久找到了 ...
- 微信小程序横版日历,tab栏
代码地址如下:http://www.demodashi.com/demo/14243.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...
- 日历组件 原生js
自己基于原生js编写的日历组件 git地址: https://github.com/lihefen/calendar.git demo : https://lihefen.github.io/cale ...
- 免费的HTML5版uploadify送上
相信有不少同学用过uploadify这一款文件上传插件,它支持多文件选择.能显示进度条.可配置性高,总体来说是比较好用的.官网有两个版本供下载,分别是flash版和HTML5版.不过令人惋惜的是,HT ...
- HTML5拓扑图形组件设计之道(一)
HT for Web(http://www.hightopo.com/guide/readme.html)提供了涵盖通用组件.2D拓扑图形组件以及3D引擎的一站式解决方案,正如Hightopo官网所表 ...
随机推荐
- BZOJ3689 异或之
我们需要知道一个事实,trie树上是可以要求第k大的! 我们每个节点记个size值然后像其他数据结构一样维护就可以了 然后我们再搞个priority_queue什么的就好了,注意每个值会出现两次只要记 ...
- extjs DateField 的值用getValue()方法获取后是一大堆字符串,类似Tue Dec 07 2010 00:00:00 GMT 0800,这玩意存入数据库实在不好办。。。
extjs DateField 的值用getValue()方法获取后是一大堆字符串,类似Tue Dec 07 2010 00:00:00 GMT 0800,这玩意存入数据库实在不好办...所以要把它格 ...
- 分批次从musql取数据,每次取1000条
$t = new Gettags(); $num=$t->sum_tag(); $num=$num/1000; $flag_num=ceil($num); $flag_array=array() ...
- 织梦dedecms分类信息模型上一页下一页失效办法
修改文件/include/arc.archives.class 将一下代码 $next = (is_array($nextR) ? " where arc.id={$nextR['id']} ...
- struts2 通用标签
*property 标签 property 标签用来输出一个值栈属性的值, 对于对象栈,打印值栈中对应的属性值:对于Map 栈,打印request,session,application的某个属性值或 ...
- Java 类的一些高级特征
1. 面向对象的特征二:继承性 * 1.为什么要设计继承性? 继承的出现提高了代码的复用性. 继承的出现让类与类之间产生了关系,提供了多态的前提. * 2.通过"class A extend ...
- [转]change the linux startup logo
1. Make sure that you have the kernel sources installed. As annoying as this may seem, you will need ...
- elementoryOS / ubuntu U盘启动问题的解决
具体现象: 进入U盘启动后,停顿在"start booting from usb device..."不动. 解决方法: 将syslinux文件夹下的syslinux.cfg中的 ...
- 理解Objective C 中id
什么是id,与void *的区别 id在Objective C中是一个类型,一个complier所认可的Objective C类型,跟void *是不一样的,比如一个 id userName, 和vo ...
- 【IOS基础知识】NSTimer定时器使用
1.声明 NSTimer *timer; 2.定义 timer = [NSTimerscheduledTimerWithTimeInterval:1.0ftarget:selfsele ...