使用cocos制作一个简易的小闹钟

使用cocos制作一个简易的小闹钟

本文转载至学习使用Cocos制作《闹钟》

使用的引擎版本是cocos2.1

具体开发过程指导

(1)Cocos Studio部分

1.打开Cocos工具,新建一个项目:

2.设置好相关的配置,点击完成,从而发布到Cocos Studio中:

3.Cocos Studio IDE介绍:

左上角的是开发常用的游戏元素、UI控件、容器等,可以像VS2013一样拖拽,并在右边设置对应的属性;左下角是资源导入,可以导入所需的图片背景;下面是时间戳,用于设置基于时间戳的动画,在Cocos2dx模板中默认是FPS=60。

4.导入下载的资源,一般我们只导入图片即可:

5.给场景添加精灵节点:

6.添加好相关的精灵到Clock节点中:

7.设置时针分针秒针的锚点重合:

8.保存clock.csd节点设计文件,返回到MainScene.csd中,把clock.csd节点拖动到合适的位置,并且设置其在MainScene.csd中的名称:

9.保存所有设计文件(*.csd),然后将其发布到VS2013中:

10.点击确定,打开VS2013工程,但是不要关闭CocosStudio工程:

(2)VS2013结合Cocos Studio部分

  HelloWorld.h代码:

 1 #ifndef __HELLOWORLD_SCENE_H__
 2 #define __HELLOWORLD_SCENE_H__
 3
 4 #include "cocos2d.h"
 5
 6 class HelloWorld : public cocos2d::Layer
 7 {
 8
 9 private:
10     // 获取 时、分、秒 的精灵对象
11     cocos2d::Sprite* hour;
12     cocos2d::Sprite* minute;
13     cocos2d::Sprite* second;
14
15     // 获取节点
16     cocos2d::Node* seekFromRootByName(cocos2d::Node* root, std::string& name);
17
18 public:
19     // there‘s no ‘id‘ in cpp, so we recommend returning the class instance pointer
20     static cocos2d::Scene* createScene();
21
22     // Here‘s a difference. Method ‘init‘ in cocos2d-x returns bool, instead of returning ‘id‘ in cocos2d-iphone
23     virtual bool init();
24
25     // implement the "static create()" method manually
26     CREATE_FUNC(HelloWorld);
27
28     void timeChanged(float dt);
29
30 };
31
32 #endif // __HELLOWORLD_SCENE_H__

HelloWorld.cpp代码:

 1 #include "HelloWorldScene.h"
 2 #include "cocostudio/CocoStudio.h"
 3 #include "ui/CocosGUI.h"
 4 // 添加声音
 5 #include "SimpleAudioEngine.h"
 6
 7 using namespace CocosDenshion;
 8
 9 USING_NS_CC;
10
11 using namespace cocostudio::timeline;
12
13 Scene* HelloWorld::createScene()
14 {
15     // ‘scene‘ is an autorelease object
16     auto scene = Scene::create();
17
18     // ‘layer‘ is an autorelease object
19     auto layer = HelloWorld::create();
20
21     // add layer as a child to scene
22     scene->addChild(layer);
23
24     // return the scene
25     return scene;
26 }
27
28 // on "init" you need to initialize your instance
29 bool HelloWorld::init()
30 {
31     //////////////////////////////
32     // 1. super init first
33     if ( !Layer::init() )
34     {
35         return false;
36     }
37
38     auto rootNode = CSLoader::createNode("MainScene.csb");
39
40     addChild(rootNode);
41
42     // 获取 时、分、秒 的精灵对象
43     hour = dynamic_cast<Sprite*>(seekFromRootByName(rootNode, std::string("h")));
44     minute = dynamic_cast<Sprite*>(seekFromRootByName(rootNode, std::string("m")));
45     second = dynamic_cast<Sprite*>(seekFromRootByName(rootNode, std::string("s")));
46
47     // 设置调度器,每1秒运行一次
48     schedule(schedule_selector(HelloWorld::timeChanged), 1.0);
49
50     return true;
51 }
52
53 Node* HelloWorld::seekFromRootByName(Node* root, std::string& name){
54
55     if (!root){    // 如果节点为空,则返回空指针
56         return nullptr;
57     }
58     if (root->getName() == name){    // 如果root的名字是要找的节点的名字,则返回节点
59         return root;
60     }
61
62     // 获取所有子节点
63     const auto& arrayNode = root->getChildren();
64
65     // 遍历子节点的数组
66     for (auto& child : arrayNode){
67         // 将child转换为Node指针,dynamic_cast运算符可以在执行期决定真正的类型
68         Node* pNode = dynamic_cast<Node*>(child);
69         if (pNode){    // 判断是否为空,不为空执行以下代码
70             Node* res = seekFromRootByName(pNode, name);    // 递归调用此函数
71             if (res)
72                 return res;    // 返回此节点
73         }
74     }
75     return nullptr;    // 返回空指针
76 }
77
78 void HelloWorld::timeChanged(float dt){
79
80     static int cnt = 0;
81     // 获取 时、分、秒 的角度
82     static float h = hour->getRotation();
83     static float m = minute->getRotation();
84     static float s = second->getRotation();
85
86     s += 6.0;    // 秒针每秒走了6.00°
87     m += 0.1;    // 分针每秒走了0.1°
88     cnt = ++cnt % 12;    // 让 cnt 在 1 - 12 中循环
89     if (cnt == 0){
90         h += 0.1;    // 时针每12秒走0.1°
91         hour->setRotation(h);    // 改变时针的角度
92     }
93     minute->setRotation(m);    // 改变分针的角度
94     second->setRotation(s);    // 改变秒针的角度
95
96     // 播放音效
97     SimpleAudioEngine::getInstance()->playEffect("clock.mp3");
98
99 }
时间: 2024-12-18 04:54:01

使用cocos制作一个简易的小闹钟的相关文章

AndroidStudio制作一个简易的订餐交易小demo【日常小练习】

AndroidStudio模拟制作一个简易的订餐交易小demo[日常小练习]     ————安德风 一.最终效果图: 二.布局设计activity_main.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/a

用XMLHttpRequest制作一个简易ajax

概述 jquery退出历史舞台之后,我们怎么来发送ajax请求呢?可以用相关的库,也可以自己制作一个简易的ajax. 需要说明的是,我们使用的是XMLHttpRequest 2,它几乎兼容所有主流浏览器:XMLHttpRequest advanced features 参考: stackoverflow答案 实现get请求 先从支持get请求开始,代码如下: function ajax(a, b, c){ // URL, callback, just a placeholder c = new

iOS:制作一个简易的计算器

初步接触视图,制作了一个简易的计算器,基本上简单的计算是没有问题的,不是很完美,可能还有一些bug,再接再厉. 1 // 2 // ViewController.m 3 // 计算器 4 // 5 // Created by ma c on 15/8/25. 6 // Copyright (c) 2015年 bjsxt. All rights reserved. 7 // 8 9 #import "ViewController.h" 10 11 @interface ViewContr

由JavaScript,setInterval制作一个简易的时钟

用js可以做许多有趣的小动画,下面是一个简易时钟的小例子,可能样式写的有点多了,下方最终效果图(作为老司机的我有点小完美的强迫症哈哈哈...) <!DOCTYPE html><html><head> <title>时钟</title> <meta charset = "utf-8"> <style type="text/css"> span{ margin: 0; padding:

Objective-C:制作一个简易的计算器

初步接触视图,制作了一个简易的计算器,基本上简单的计算是没有问题的,不是很完美,可能还有一些bug,再接再厉. 1 // 2 // ViewController.m 3 // 计算器 4 // 5 // Created by ma c on 15/8/25. 6 // Copyright (c) 2015年 bjsxt. All rights reserved. 7 // 8 9 #import "ViewController.h" 10 11 @interface ViewContr

使用Windows Form 制作一个简易资源管理器

自制一个简易资源管理器----TreeView控件 第一步.新建project,进行基本设置:(Set as StartUp Project:View/Toolbox/TreeView) 第二步.开始添加节点 添加命名空间using System.IO; 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Dra

制作一个简易的UGUI无限滑动框(Unity)

市面上有很多这种无限拖拽的插件 但是功能细化的太严重了 改的话有些耗时 如果没有太多严苛的需求没必要改工程量比较大的插件 完全可以自己写一个 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class ItemRect { public Rect mRect; //格子的索引 因为是用来关联位置的 所以不存在删除或修改操作 pub

任务2--安装Intellj IDEA,编写一个简易四则运算小程序,并将代码提交到GitHub

我的GitHub地址为:https://github.com/Orangeyc123 首先呢,我并没有完整的完成任务,我觉得主要问题有以下几个 1.由于之前都没有听说过intellj IDEA这个软件,安装的时候就碰到了好多问题.对于我这个人来说呢,有一点很大的毛病就是对于从来没见过不知道的东西有一种畏惧心理.怕自己装的不对,怕自己有哪一个步骤和别人不一样而产生不同的结果. 比如 之前一直没有遇到过这种情况,显然有些不知所措,不过还好,问了学长以后我想以后出现这种问题应该so easy. 下载并

制作一个简易计算器——基于Android Studio实现

一个计算器Android程序的源码部分分为主干和细节两部分. 一.主干 1. 主干的构成 计算器的布局 事件(即计算器上的按钮.文本框)监听 实现计算 2. 详细解释 假设我们的项目名为Calculator,而布局名称(Layout Name)为默认的activity_main .即设置如下图所示: 在这种前提下,有: 设置计算器布局的文件:Calculator/app/src/main/res/layout/activity_main.xml 事件监听和计算实现在同一个文件里:Calculat