如何在COCOS2D中绘制3d椭圆柱?
来源:互联网 发布:手机淘宝登陆连接失败 编辑:程序博客网 时间:2024/05/22 14:16
将以下代码添加到CCActionGrid3D.h
class CC_DLL CCEllipse3D : public CCGrid3DAction
{public:
/** initializes an action with duration, grid size, waves and amplitude */
bool initWithDuration(float duration, const CCSize& gridSize, float alength, float blength, float startangle, float endagnle,float xoffset,float yoffset);
/**
* @js NA
* @lua NA
*/
virtual CCObject* copyWithZone(CCZone* pZone);
virtual void update(float time);
public:
/** creates an action with duration, grid size, waves and amplitude */
static CCEllipse3D* create(float duration, const CCSize& gridSize, float alength, float blength, float startangle, float endagnle,float xoffset,float yoffset);
protected:
float m_fStartAngle;//开始角
float m_fEndAngle;//结束角
float m_fALength;//长轴
float m_fBLength;//短轴
float m_fXOffset;//X偏移
float m_fYOffset;//Y偏移
};
将以下代码添加到CCActionGrid3D.cpp
CCEllipse3D* CCEllipse3D::create(float duration, const CCSize& gridSize, float alength, float blength, float startangle, float endagnle,float xoffset,float yoffset)
{
CCEllipse3D *pAction = new CCEllipse3D();
if (pAction)
{
if (pAction->initWithDuration(duration, gridSize, alength, blength, startangle, endagnle, xoffset, yoffset))
{
pAction->autorelease();
}
else
{
CC_SAFE_RELEASE_NULL(pAction);
}
}
return pAction;
}
bool CCEllipse3D::initWithDuration(float duration, const CCSize& gridSize, float alength, float blength, float startangle, float endagnle,float xoffset,float yoffset)
{
if (CCGrid3DAction::initWithDuration(duration, gridSize))
{
m_fStartAngle = startangle;//开始角
m_fEndAngle = endagnle;//结束角
m_fALength = alength;//长轴
m_fBLength = blength;//短轴
m_fXOffset = xoffset;//X偏移
m_fYOffset = yoffset;//Y偏移
return true;
}
return false;
}
CCObject* CCEllipse3D::copyWithZone(CCZone *pZone)
{
CCZone* pNewZone = NULL;
CCEllipse3D* pCopy = NULL;
if(pZone && pZone->m_pCopyObject)
{
//in case of being called at sub class
pCopy = (CCEllipse3D*)(pZone->m_pCopyObject);
}
else
{
pCopy = new CCEllipse3D();
pZone = pNewZone = new CCZone(pCopy);
}
CCGrid3DAction::copyWithZone(pZone);
pCopy->initWithDuration(m_fDuration, m_sGridSize, m_fALength, m_fBLength,m_fStartAngle,m_fEndAngle,m_fXOffset,m_fYOffset);
CC_SAFE_DELETE(pNewZone);
return pCopy;
}
void CCEllipse3D::update(float time)
{
int i, j;
for (i = 0; i < m_sGridSize.width+1; i++)
{
float angle = (m_fStartAngle +(m_fEndAngle-m_fStartAngle)*i/m_sGridSize.width)*time;
for (j = 0; j < m_sGridSize.height + 1; j++)
{
ccVertex3F v = originalVertex(ccp(i ,j));
v.x = m_fALength*cos(angle)-m_fALength+m_fXOffset;
v.y = m_fBLength*sin(angle)+ v.y + m_fYOffset;
setVertex(ccp(i, j), v);
}
}
}
调用相关方法:
runAction(CCEllipse3D::create(1.0f, CCSize(60,1) ,490.0f,-90.0f,0.0f,(float)M_PI,1135.0f,-130.0f));
第一个参数代表时间
第二个参数代表网格
第三个参数椭圆长轴
第四个参数椭圆短柱
第五个参数开始绘制角
第六个参数结束绘制角
第七个参数x轴偏移
第八个参数Y轴偏移
- 如何在COCOS2D中绘制3d椭圆柱?
- 在3D空间中绘制点
- 在3D空间中绘制直线
- 在3D空间中绘制三角形
- 在3D空间中绘制四边形
- cocos2d-x中绘制3D图形--3D ToolKit for cocos2dx实现原理
- 在Flex Chart 中绘制3D图表
- 在Flex Chart 中绘制3D图表
- 在cocos2d-x中动态绘制二维码
- Libgdx中如何绘制带透明度的3D模型相关实现代码 2种方案
- 如何:在矩形中绘制换行文本
- 如何在ChemDraw中绘制透视图形
- 如何在DuiLib中绘制用户数据
- 如何在R中绘制热力地图
- opengl学习笔记3-1-在3D中绘制点
- 在D3D中绘制一个三角形的一个完整过程(学习3D游戏笔记一)
- 本节将演示在3D空间中绘制图形的几个简单实例:
- 理解 Cocos2D 如何绘制帧
- Android—Service的使用(一)
- ajax和json与php小结合
- JDK9初体会心得
- 兼容不同的屏幕大小
- 关于程序员的文章摘录
- 如何在COCOS2D中绘制3d椭圆柱?
- APP应用发送邮件
- 关于Lucene4.x起Field对象不在指定域排序的一点解惑
- 关于在使用gson解析json时建模与规范冲突的问题
- [BestCoder #31]简要题解
- Android SurfaceView双缓存
- 如何分析APP功能需求、结构?
- 算法设计技巧--离散暴力将时间将为O(0);
- 代码大全:启程