技术经验分享:cocos3抛物线运动

简介: 技术经验分享:cocos3抛物线运动

"

#pragma once

#include ""cocos2d.h""

USING_NS_CC;

class Parabola:public ActionInterval

{

public:

static Parabola* create(const CCPoint& startPosition, const CCPoint& endPosition,

float //代码效果参考:https://v.youku.com/v_show/id_XNjQwNjg1ODY3Ng==.html

angle, float g,float &return_duration);

//override

virtual Parabola* clone() const override;

virtual Parabola* reverse() const override;

virtual void update(float time) override;

protected:

bool initWithDuration(float duration, const CCPoint& startPosition,

const CCPoint& endPosition, float angle, float g, float vx0, float vy0);

protected:

float m_vx0;

float m_vy0;

Point m_startPosition;

Point m_endPosition;

float m_angle;

float m_dur ;

float m_tan_a;

float m_g;

};

#include ""Parabola.h""

#define PIXELS_PER_METER 100

Parabola* Parabola::create(const CCPoint& startPosition, const CCPoint& endPosition,

float angle, float g,float &return_duration)

{

Parabola *pRet = new Parabola();

float vx0,vy0, x1, y1, duration;

x1 = endPosition.x - startPosition.x;

y1 = endPosition.y - startPosition.y;

x1 /= PIXELS_PER_METER; //像素到米的转换,PIXELS_PER_METER为转换系数,这里设置为100

y1 /= PIXELS_PER_METER;

angle = angle*3.14 / 180;//convert t to radian

if (x1[span style=""color: rgba(128, 0, 128, 1)"">0)

{

angle *= -1;

}

vx0 = x1sqrt(g / 2 / (x1tan(angle) - y1)); //求出初速度

vy0 = vx0 * tan(angle);

duration = x1 / vx0; //求出整个运动的时间

return_duration = duration; //将duration通过参数返回

pRet->initWithDuration(duration,startPosition, endPosition, angle,g, vx0, vy0);

pRet->autorelease();

return pRet;

}

bool Parabola::initWithDuration(float duration, const Point& startPosition, const Point& endPosition, float angle, float g, float vx0, float vy0)

{

if (CCActionInterval::initWithDuration(duration))

{

m_vx0 = vx0;

m_vy0 = vy0;

m_startPosition = startPosition;

m_endPosition = endPosition;

angle = angle*3.14 / 180;//convert t to radian

m_angle = angle;

m_dur = duration;

m_tan_a = tan(angle);

m_g = g;


//代码效果参考: https://v.youku.com/v_show/id_XNjQwMDQxMTcwNA==.html

return true;

}

return false;

}

Parabola* Parabola::clone() const

{

CC_ASSERT(0);

return nullptr;

}

Parabola* Parabola::reverse() const

{

CC_ASSERT(0);

return nullptr;

}

void Parabola::update(float time)

{

if (_target)

{

float elapsed = _elapsed; //获得当前的运动时间

float diff_x = m_vx0 * elapsed;

float diff_y = m_vy0 elapsed - 0.5 m_g elapsed elapsed;

CCPoint newPos = ccpAdd(m_startPosition, ccp(diff_x PIXELS_PER_METER, diff_y PIXELS_PER_METER)); //单位由米转换为像素

_target->setPosition(newPos);

}

}


"
image.png
相关文章
|
1月前
|
图形学 开发者
【独家揭秘】Unity游戏开发秘籍:从基础到进阶,掌握材质与纹理的艺术,打造超现实游戏视效的全过程剖析——案例教你如何让每一面墙都会“说话”
【8月更文挑战第31天】Unity 是全球领先的跨平台游戏开发引擎,以其高效性能和丰富的工具集著称,尤其在提升游戏视觉效果方面表现突出。本文通过具体案例分析,介绍如何利用 Unity 中的材质与纹理技术打造逼真且具艺术感的游戏世界。材质定义物体表面属性,如颜色、光滑度等;纹理则用于模拟真实细节。结合使用两者可显著增强场景真实感。以 FPS 游戏为例,通过调整材质参数和编写脚本动态改变属性,可实现自然视觉效果。此外,Unity 还提供了多种高级技术和优化方法供开发者探索。
41 0
|
2月前
|
图形学 开发者
【Unity光照艺术手册】掌握这些技巧,让你的游戏场景瞬间提升档次:从基础光源到全局光照,打造24小时不间断的视觉盛宴——如何运用代码与烘焙创造逼真光影效果全解析
【8月更文挑战第31天】在Unity中,合理的光照与阴影设置对于打造逼真环境至关重要。本文介绍Unity支持的多种光源类型,如定向光、点光源、聚光灯等,并通过具体示例展示如何使用着色器和脚本控制光照强度,模拟不同时间段的光照变化。此外,还介绍了动态和静态阴影、全局光照及光照探针等高级功能,帮助开发者创造丰富多样的光影效果,提升游戏沉浸感。
39 0
|
1月前
|
图形学 开发者
透视与正交之外的奇妙视界:深入解析Unity游戏开发中的相机与视角控制艺术,探索打造沉浸式玩家体验的奥秘与技巧
【8月更文挑战第31天】在Unity中,相机不仅是玩家观察游戏世界的窗口,更是塑造氛围和引导注意力的关键工具。通过灵活运用相机系统,开发者能大幅提升游戏的艺术表现力和沉浸感。本文将探讨如何实现多种相机控制,包括第三人称跟随和第一人称视角,并提供实用代码示例。
51 0
|
存储 机器学习/深度学习 人工智能
个人觉得AIGC是任何开发都绕不过去的!
众所周知,AI技术让人人都有望实现艺术家的梦,不管是火遍全网的AI绘画,还是大家耳熟能详的通义千问,都属于AIGC的典型案例。与此同时,AIGC 高质量内容产出的背后,离不开跨模态预训练模型的成熟,文生图作为当前AIGC的主流应用之一,可以让没有绘画基础的任何人都可以创作出非常有意境的图画。那么本文就来简单分享一下个人关于使用AIGC的体验感受。
232 1
个人觉得AIGC是任何开发都绕不过去的!
|
5月前
|
算法 数据可视化 vr&ar
【图形学】探秘图形学奥秘:图形变换的解密与实战
【图形学】探秘图形学奥秘:图形变换的解密与实战
67 0
|
5月前
俄罗斯方块游戏开发实战教程(5):形状碰撞检测(下)
俄罗斯方块游戏开发实战教程(5):形状碰撞检测(下)
84 1
|
5月前
|
开发工具
俄罗斯方块游戏开发实战教程(4):形状碰撞检测(上)
俄罗斯方块游戏开发实战教程(4):形状碰撞检测(上)
72 1
|
Python
通过游戏学Python系列之小兔要上天---手把手教你使用Pygame开发平台跳跃类游戏02之物体运动
通过游戏学Python系列之小兔要上天---手把手教你使用Pygame开发平台跳跃类游戏02之物体运动
118 0
|
Python
通过游戏学Python系列之小兔要上天---手把手教你使用Pygame开发平台跳跃类游戏03之重力及碰撞检测
通过游戏学Python系列之小兔要上天---手把手教你使用Pygame开发平台跳跃类游戏03之重力及碰撞检测
170 0
|
Java
手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏05图像仿射变换(平移和缩放操作)
手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏05图像仿射变换(平移和缩放操作)
146 0
下一篇
无影云桌面