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-09-12 00:30:10

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

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

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

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.normalize(); auto dot =

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-X入门(4)Touch 事件:移动精灵

在.h中声明: virtual void registerWithTouchDispatcher(void); virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent); virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent); virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent); virtual voi

Cocos2D-X入门(3)图片文字显示

在cocos2D-X中,一般用CCLabelTTF来显示文字: CCLabelTTF* pLabel=CCLabelTTF::create("This is a Label","Arial",24); pLabel->setPosition(ccp(mSize.width/2,mSize.height/2)); this->addChild(pLabel); 如果想要用自己设计的文字,那就要用CCLabelAtlas了,具体用法: //参数依次:文字内容

使用C++进行Cocos2d-x游戏开发入门过程中的要点解析_C 语言

总结了下,新手引导的要点有以下几个: 画面的变化. 触摸和按钮响应. 逻辑处理及代码组织. 下面我们就详细讲述这几个要点: 一.画面的变化. 对个这个不同的游戏的做法不尽相同,归结起来大概有这么几种: 1.画面整体变暗 这个比较简单,cocos2d就有现成接口: CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize(); //第一个参数是颜色ccc4(r,g,b,a) a取值(0~255),越大越不透明 下面两个参数为

PHP 用QueryList抓取网页内容

原文:PHP 用QueryList抓取网页内容 之前抓取网页数据都是用Java Jsoup,前几天听说用PHP抓更方便,今天就研究了一下,主要是用QueryList来实现. QueryList是一个基于phpQuery的通用列表采集类,是一个简单. 灵活.强大的采集工具,采集任何复杂的页面 基本上就一句话就能搞定了.   直接拿博客园举例子了,http://www.cnblogs.com/ 我们用QueryList来抓取红框里面的内容     查看网页源代码找到红框的位置 1 <div id=&qu

cocos2d基础入门

HelloCpp中Classes目录下放开发者自己的类: win32:平台相关,coco2d已默认创建:coco2d-x目录下,samples/cpp/HelloCpp/(工程根目录)图片放置位置:根目录下/Resources目录下;什么是场景:场景是占据屏幕的界面:什么是锚点:锚点如何设置: CCSprite * leftdoor = CCSprite::create("loading/door.png"); leftdoor->setAnchorPoint(ccp(1,0.5

Cocos2D-X入门(7)无限地图滚动

地图的滚动原理很简单,就是持续设置地图的位置即可.具体实现用schedule()函数. pMap = CCSprite::create("MapHenn.png"); pMap->setPosition(ccp(mSize.width/2, mSize.height/2)); this->addChild(pMap, 0); schedule(schedule_selector( SpriteScene::updateMap),0.1f); schedule()函数的作用就