Cocos2d入门--2--三角函数的应用

其实,三角函数的知识点是初中的数学基础。但是在编程里合理的利用的话,也会很好玩的,可以制作出很多有趣的动画特效。

首先要注意的是 角度 和 弧度 的转换。

360度 = 2×PI弧度

180度 =   PI弧度

所以30度的正弦函数 = sin(30/180×PI)

但是在cocos2d游戏引擎提供的sin(参数值)这里的参数值范围是在[0,1]之间。

利用三角函数的波形来控制小球的运动

关键代码:

头文件:

1 protected:
2     float _angle;

cpp实现文件:

 1     _angle = 0;
 2
 3     //1、创建一个点
 4     auto dot = DrawNode::create();
 5     dot -> drawDot(Vec2(0, 0), 10, Color4F(1.0, 1.0, 1.0, 1.0));
 6     addChild(dot);
 7
 8     dot -> setPosition(origin.x + visibleSize.width/2,origin.y + visibleSize.height/2);
 9
10     CCLOG("%f",origin.y + visibleSize.height/2);
11
12     schedule([dot,this,visibleSize,origin](float f){
13         //2、写这里代码之前,我们先在头文件中,创建一个成员变量float _angle,用来记录角度
14         //3、然后我们可以使用这个成员变量,因为需要变换角度或者位置,所以就用set...,这里先变换Y坐标的位置
15         //4、初始化_angle写到前面
16         //5、为了能够发生变化,所以需要:
17         _angle += 0.1;
18         dot -> setPositionY(sin(_angle)*100 + origin.y + visibleSize.height/2);//这里的sin里面的参数取值范围是[0,1];为了变化更明显,所以×100倍
19         dot -> setPositionX(sin(_angle)*100 + origin.x + visibleSize.width/2);
20     }, "Test");

当你把schedule里面的两个使用的sin三角函数都换成cos函数,实现的效果是一样的,当你如果一个使用sin,另一个使用cos,就会出现下面的圆周运动的效果:

1 dot -> setPositionY(sin(_angle)*100 + origin.y + visibleSize.height/2);//这里的sin里面的参数取值范围是[0,1];为了变化更明显,所以×100倍
2 dot -> setPositionX(cos(_angle)*100 + origin.x + visibleSize.width/2);

然后如果要实现椭圆的运动,就需要把×100适当改一下,改其中一个就好:

1 dot -> setPositionY(sin(_angle)*100 + origin.y + visibleSize.height/2);//这里的sin里面的参数取值范围是[0,1];为了变化更明显,所以×100倍
2 dot -> setPositionX(cos(_angle)*150 + origin.x + visibleSize.width/2);
时间: 2024-11-03 21:29:40

Cocos2d入门--2--三角函数的应用的相关文章

Cocos2d入门--3-- 向量的应用

 Cocos2d入门--3-- 向量的应用 小球向一个方向持续运动的Demo HelloWorldScene.h ...... //设置一个protected的属性 protected: cocos2d::Vec2 _vec; ...... HelloWorldScene.cpp //这个是通过随机数设置向量的方向 _vec.set(random(-0.1f, 1.0f), random(-1.0f, 1.0f)); //通过normalize这个标准化函数,能够使得向量的大小为1 _vec.n

Cocos2d入门--1-- 初涉相关属性或代码

 Cocos2d入门--1-- 初涉相关属性或代码 Cocos2d vision:  cocos2d-x-3.8.1 万丈高楼,起于累土.对于一个游戏框架的学习,其实在于框架功能的使用积累,学会了如何在cocos2d游戏引擎的基础上使用它提供的各种功能,并灵活运用, 以及学会查阅Cocos2d官方提供的API文档.相信自己也能开发出自己喜爱或者让别人羡慕的游戏. 目录: 1>认识origin和visibleSize以及cocos2d的基础绘画类DrawNode的简单实用 2>认识 CCLOG(

【Cocos2d入门教程六】Cocos2d-x事件篇之触摸

Cocos游戏当中产生一个事件时,可以有多个对象在监听该事件,所以有优先级(Priority).优先级越高(Priority值越小),事件响应越靠前. 关系图: 新 事件分发机制:在2.x 版本事件处理时,将要触发的事件交给代理(delegate)处理,再通过实现代理里面的onTouchBegan等方法接收事件,最后完成事件的响应. 而在新的事件分发机制(3.x)中,只需通过创建一个事件监听器-用来实现各种触发后的逻辑,然后添加到事件分发器_eventDispatcher,所 有事件监听器由这个

Cocos2d入门--3--小球运动

本章直接上源代码.内容不难,主要就是 HelloWorldScene.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 protected: 9 float _angle; 10 cocos2d::Vec2 _vec; 11 public: 12

【Cocos2d入门教程一】Cocos2d-x环境搭建

在进行Cocos2d游戏开发前 我们先来配置一下环境,我们先来准备一下工具,我们所需要的工具分别为: 1.Cocos2d引擎 2.JDK 3.SDK 4.NDK 5.ANT 6.ADT 1.下载Cocos2d-x引擎,目前最新版本为3.6,本教程的所有例子以3.4版本为例,下载完直接解压即可.点击下载Cocos2d引擎 2.JDK 检查自己电脑上是否已装好JDK环境 方法:打开终端,输入 java–version 如果没有安装过,点击下载JDK 效果如下: 3.ADT下载,ADT被称为安卓的集成

【Cocos2d入门教程八】浅析Cocoss2d下的音频引擎及封装音频类

Cocos2d-x提供了一个音频CocosDenshion引擎,CocosDenshion引擎可以独立于Cocos2d-x单独使用,CocosDenshion引擎本质上封装了OpenAL音频处理库.具体使用的API是SimpleAudioEngine.在大多数平台上,cocos2d-x可以调用不同的SDK API来播放背景音乐和音效.CocosDenshion音频引擎只能在同一时间只能播放一首背景音乐,但是能同时播放许多音效.下面列举CocosDenshion引擎下的SimpleAudioEng

【Cocos2d入门教程四】Cocos2d-x菜单篇

游戏世界多姿多彩,无论多靓丽的游戏,多耐玩的游戏,在与游戏用户交互上的往往是菜单. 上一章我们已经大概了解了导演.节点.层.精灵.这一章以菜单为主题. 菜单(Menu)包含以下内容: 1.精灵菜单项(MenuItemSprite) 2.图片菜单项(MenuItemImage) 3.文字菜单项(MenuItemFont) 4.标签菜单项(MenuItemLabel) 4.开关菜单项(MenuItemToggle) 菜单的继承关系: 这里图片菜单项也是同样继承于精灵菜单下.图片菜单项也可称为精灵菜单

【Cocos2d入门教程三】HelloWorld之一目了然

什么程序都是从HelloWorld先开始.同样Cocos2d-x我们先从HelloWorld进行下手.下面是HelloWorld的运行完成图: 建立好的Cocos游戏项目中会有两个比较常用接触的文件夹.分别为Classes与resource.Classes存取代码文件,resource存取资源文件,下面为完整的项目架构: 我们先来看下最基本的AppDelegate.cpp类 1 #include "AppDelegate.h" 2 #include "HelloWorldSc

【Cocos2d入门教程二】Cocos2d-x基础篇

上一章已经学习了环境的搭建.这一章对基础概念进行掌握.内容大概有: 1.导演 2.场景 3.节点 4.层 4.精灵 1.导演(Director) 导演存在的主要作用: 环境设定(帧率 初始化openGl和渲染器) 场景管理 执行主循环 游戏就是个死循环 不断不断的渲染  就跟视频没两样 一帧一帧的绘制出来  话说提一下一帧为1/60秒  也就是说cocos2d里一秒渲染60次 导演的管理:   计时器  事件管理器  动作管理器 导演继承于REF  一个单例类 获得导演类Director实例语句