cocos2d 走动椭圆

1.效果图


艺术与规划说他想与我合作在全国率先主角光环加,椭圆形走动。

cocos2d自带没有,參考网上的写了一个。



2.椭圆数学知识


有关椭圆的数学知识我已经忘光了。网上找了点资料:

a是椭圆的长半轴,b是椭圆的短半轴。

o是角度,范围是[0, 2π]。

我们须要知道椭圆上的位置,能够用以下的公式:



3.直接代码了..


OvalActionInterval.h

#ifndef __JumpGame__OvalInterval__
#define __JumpGame__OvalInterval__#include "CCActionInterval.h"//包括系统延时类动作头文件using namespace cocos2d;// 定义一个结构来包括确定椭圆的參数
typedef struct OvalConfig {//中心点坐标Vec2 centerPosition;//椭圆a长半轴float a;//椭圆b短半轴float b;//是否逆时针运动bool moveInAnticlockwise;//two zOrderstd::pair<int, int> zOrder;
} lOvalConfig;/**以椭圆方式移动
*/class CC_DLL MoveOvalBy : public ActionInterval{
public:MoveOvalBy();//用“动作持续时间”和“椭圆控制參数”初始化动作bool initWithDuration(float t, const OvalConfig& c);virtual MoveOvalBy* clone() const override;virtual MoveOvalBy* reverse() const override;virtual void update(float t);//利用update函数来不断的设定坐标virtual void startWithTarget(Node *target) override;
public://用“动作持续时间”和“椭圆控制參数”创建动作static MoveOvalBy *create(float t, const OvalConfig& c);protected:OvalConfig _config;//x = a * cos(t)  t = [0, 2Pi]inline float getPositionXAtOval(float t ){//返回X坐标//參数方程if(_config.moveInAnticlockwise == false){return _config.a * cos(6.2831852 * (1 - t));}else{return _config.a * cos(6.2831852 * t);}}//y = b * sin(t)  t = [0, 2Pi]inline float getPositionYAtOval(float t ){//返回Y坐标//參数方程if(_config.moveInAnticlockwise == false){return _config.b * sin(6.2831852 * (1 - t));}else{return _config.b * sin(6.2831852 * t);}}
private:CC_DISALLOW_COPY_AND_ASSIGN(MoveOvalBy);
};#endif 

OvalActionInterval.cpp

#include "OvalActionInterval.h"MoveOvalBy::MoveOvalBy(){}//
//MoveOvalBy
//
MoveOvalBy* MoveOvalBy::create(float t, const OvalConfig& c){//利用之前定义的椭圆的參数初始化椭圆MoveOvalBy *action = new MoveOvalBy();action->initWithDuration(t, c);action->autorelease();return action;
}bool MoveOvalBy::initWithDuration(float t, const OvalConfig& c){if (ActionInterval::initWithDuration(t)){_config = c;return true;}return false;
}
void MoveOvalBy::update(float t){//t [0, 1]//log("t:%f", t);if (_target){float x = getPositionXAtOval(t);//调用之前的坐标计算函数来计算出坐标值float y = getPositionYAtOval(t);_target->setPosition(_config.centerPosition + Vec2(x, y));//因为我们画计算出的椭圆你做值是以原点为中心的。所以须要加上我们设定的中心点坐标if(t <= 0.5){_target->setLocalZOrder(_config.zOrder.first);}else{_target->setLocalZOrder(_config.zOrder.second);}}
}MoveOvalBy* MoveOvalBy::clone() const{auto action = new MoveOvalBy();action->initWithDuration(_duration, _config);action->autorelease();return action;
}MoveOvalBy* MoveOvalBy::reverse() const{OvalConfig newConfig;newConfig.centerPosition = _config.centerPosition;newConfig.a = _config.a;newConfig.b = _config.b;newConfig.moveInAnticlockwise = !_config.moveInAnticlockwise;newConfig.zOrder = _config.zOrder;return MoveOvalBy::create(_duration, newConfig);
}void MoveOvalBy::startWithTarget(Node *target){ActionInterval::startWithTarget(target);
}

參考:http://blog.csdn.net/ufolr/article/details/7447773
我这里还加上了zOrder。这样有透视效果。

a等于b的时候就是圆形了。

有时候在游戏中略微用上点数学知识感觉非常爽。
调用例如以下:

auto size = this->getContentSize();auto ball = Sprite::createWithSpriteFrameName("defenceBall.png");this->addChild(ball);ball->setPosition(Vec2(size.width * 0.5, size.height * 0.5) + Vec2(0, 10));OvalConfig config;config.a = 100;config.b = 20;config.centerPosition = ball->getPosition();config.moveInAnticlockwise = true;config.zOrder = make_pair(-1, 0);auto moveAction = MoveOvalBy::create(1.0, config);ball->runAction(RepeatForever::create(moveAction));

http://www.waitingfy.com/archives/1343

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/399209.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习中用来训练的train.py 探究学习2.0( 数据预处理)

数据预处理 下列代码为train.py中常见的一些数据处理方法 train_transform transforms.Compose([transforms.Resize((224, 224)),transforms.RandomVerticalFlip(),# 随机旋转&#xff0c;-45度到45度之间随机选transforms.RandomRotation(45),# 从中心开始裁剪transforms.C…

go语言入门(三)

条件语句 go语言的条件语句结构如下&#xff1a; go语言的条件语句和其他语言类似。简单列举下&#xff1a; 1、if 语句&#xff0c;布尔表达式不需要括号 if 布尔表达式 {   /* 在布尔表达式为 true 时执行 */   } 2、if...else语句 if 布尔表达式 { /* 在布尔表达式为 tr…

HDU 1950 Bridging signals

那么一大篇的题目描述还真是吓人。 仔细一读其实就是一个LIS&#xff0c;还无任何变形。 刚刚学会了个二分优化的DP&#xff0c;1A无压力。 1 //#define LOCAL2 #include <iostream>3 #include <cstdio>4 #include <cstring>5 using namespace std;6 7 const…

1.8暂停线程

在java中&#xff0c;使用suspend()方法暂停线程&#xff0c;使用resume()方法恢复线程的执行。 1.8.1suspend与resume的使用&#xff1a; 线程代码&#xff1a; public class Thread1 extends Thread {private long i 0L;public long getI() {return i;}public void setI(lon…

JAVA解析纯真IP地址库

2019独角兽企业重金招聘Python工程师标准>>> 用java实现对纯真IP数据库的查询&#xff0c;首先到网上下载QQwry.da文件&#xff0c;读取代码如下&#xff1a;1.IP记录实体类 package com.guess.tools; /** * 一条IP范围记录&#xff0c;不仅包括国家和区域&#xff…

webstorm 代码提示

1、vue语法提示 设置 – Inspections – HTML – Unknown HTML tags&#xff0c;添加customs v-text     v-html     v-once     v-if     v-show     v-else     v-for     v-on     v-bind     v-model     v-ref     v-el   …

Atitit. 提升软件开发效率and 开发质量---java 实现dsl 4gl 的本质and 精髓 O725

Atitit. 提升软件开发效率and 开发质量---java 实现dsl 4gl 的本质and 精髓 O725 1. DSL主要分为三类&#xff1a;外部DSL、内部DSL&#xff0c;以及语言工作台。 1 2. DSL规则 2 2.1. DSL 整洁的代码 2 2.2. DSL必须以文本代码的形式出现 2 2.3. DSL的语法应该尽可能地接近…

java tcp 监听端口_【TCP/IP】端口未监听,还能访问成功?

作者&#xff1a;Mr林_月生链接&#xff1a;https://www.jianshu.com/p/3ab10c8685b5现象直接上图可以发现&#xff0c;本地没监听50000端口的服务&#xff0c;但是尝试连接本地50000端口时&#xff0c;却能成功建立连接&#xff0c;这种现象叫做「自连接」。我们再通过netstat…

python随机生成定长字符串(转)

原文&#xff1a;http://www.oschina.net/code/snippet_153443_4752 运行结果&#xff1a; 转载于:https://www.cnblogs.com/Jollyxi/p/7992007.html

HDU 2204 Eddy's爱好(容斥原理)

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid2204 解题报告&#xff1a;输入一个n让你求出[1&#xff0c;n]范围内有多少个数可以表示成形如m^k的样子。 不详细说了&#xff0c;自己一开始也忽略了三个素数的乘积的乘方的情况。 1 #include<cstdio>2…

python 物理引擎 摩擦力_参赛作品2-phenom的2D物理引擎

全球图形学领域教育的领先者、自研引擎的倡导者、底层技术研究领域的技术公开者&#xff0c;东汉书院在致力于使得更多人群具备内核级竞争力的道路上&#xff0c;将带给小伙伴们更多的公开技术教学和视频&#xff0c;感谢一路以来有你的支持。我们正在用实际行动来帮助小伙伴们…

vue-cli的webpack模版,相关配置文件dev-server.js与webpack.config.js配置解析

1.下载vue-cli [html] view plaincopy npm install vue-cli -g vue-cli的使用与详细介绍&#xff0c;可以到github上获取https://github.com/vuejs/vue-cli 2.安装webpack项目模版 [html] view plaincopy vue init <template-name> <project-name> 比如&#xff…

zookeeper windows 下安装

2019独角兽企业重金招聘Python工程师标准>>> 前沿&#xff1a;最近公司做的项目用到了dubbo 和 zookeeper 由于 每次测试的时候 我本地的服务就会注册到测试机上&#xff0c;还得每次把测试机的服务停止掉&#xff0c;所以准备在本地搭建一个zookeeper。 安装过程 2…

小白学jquery Mobile《构建跨平台APP:jQuery Mobile移动应用实战》连载四(场景切换)...

作为一款真正有使用价值的应用&#xff0c;首先应该至少有两个页面&#xff0c;通过页面的切换来实现更多的交互。比如手机人人网&#xff0c;打开以后先是进入登录页面&#xff0c;登录后会有新鲜事&#xff0c;然后拉开左边的面板&#xff0c;能看到相册、悄悄话、应用之类的…

Mysql学习总结(12)——21分钟Mysql入门教程

21分钟 MySQL 入门教程 目录 一、MySQL的相关概念介绍二、Windows下MySQL的配置 配置步骤MySQL服务的启动、停止与卸载三、MySQL脚本的基本组成四、MySQL中的数据类型五、使用MySQL数据库 登录到MySQL创建一个数据库选择所要操作的数据库创建数据库表六、操作MySQL数据库 向表中…

java 队列实例_Java 实例 - 队列(Queue)用法

全屏Java 实例 - 队列(Queue)用法队列是一种特殊的线性表&#xff0c;它只允许在表的前端进行删除操作&#xff0c;而在表的后端进行插入操作。LinkedList类实现了Queue接口&#xff0c;因此我们可以把LinkedList当成Queue来用。以下实例演示了队列(Queue)的用法&#xff1a;Ma…

UVa 11549 Calculator Conundrum

大白书里面的题感觉就是没有什么固定的思路&#xff0c;只能认真理解学习汝佳大大的代码。 这里用的Floyd判圈法&#xff0c;就像插图里面的一样&#xff0c;两个小孩&#xff0c;一个快一个慢&#xff0c;如果实在一个环形跑道&#xff0c;那么快的那个最终一定会“追上”慢的…

几个性能测试工具

我个人认为一个优秀的软件工程师必须掌握一定的测试技能。可能有的开发工程师认为测试是测试工程师的事情&#xff0c;不是开发工程师的事情。这种开发工程师是缺一条腿的&#xff0c;离开了测试工程师&#xff0c;你如何证明你的程序没有问题。 下面是我这两天搜集的性能测试工…

Bootstrap页面布局14 - BS按钮群组

首先看看这个代码&#xff1a; <div classbtn-group><button typebutton classbtn>计算机</button><button typebutton classbtn>网络</button><button typebutton classbtn>桌面项目</button> </div> 将功能相近的按钮分成一…

type const mysql_Mysql Explain之type详解

select version()&#xff1a;5.7.21MySQL 提供了一个 EXPLAIN 命令, 它可以对 SQL 语句进行分析, 并输出 SQL 执行的详细信息, 以供开发人员针对性优化.例如分析一条 SELECT 语句EXPLAIN 结果中的type字段Tips&#xff1a;常见的扫描方式system&#xff1a;系统表&#xff0c;…