`
loveq369
  • 浏览: 25601 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Android Cocos2d实现:一个图片围绕一个圆心做圆运动

阅读更多

转载自:http://www.longhaiqiang.com/android-cocos2d实现:一个图片围绕一个圆心做圆运动/

实现效果:

 

public class CCRoundBy extends CCIntervalAction {
    boolean turn;// Forward or Reverse round
    float startAngle;// default
    float radius;// Round circle radius
    CGPoint center;// Round circle center point

    public boolean isTurn() {
		return turn;
	}

	public void setTurn(boolean turn) {
		this.turn = turn;
	}

	public float getStartAngle() {
		return startAngle;
	}

	public void setStartAngle(float startAngle) {
		this.startAngle = startAngle;
	}

	public float getRadius() {
		return radius;
	}

	public void setRadius(float radius) {
		this.radius = radius;
	}

	public CGPoint getCenter() {
		return center;
	}

	public void setCenter(CGPoint center) {
		this.center = center;
	}

	/** creates the action */
    public static CCRoundBy action(float duration,boolean a,CGPoint point, float r) {
        return new CCRoundBy(duration, a, point, r);
    }

    /** initializes the action */
    protected CCRoundBy(float duration,boolean a,CGPoint point, float r) {
        super(duration);
        turn = a;
        radius = r;
        center = point;
    }

    @Override
    public void start(CCNode aTarget) {
        super.start(aTarget);

        startAngle = aTarget.getRotation();
        if (turn) {
            ((CCNode)aTarget).setPosition(CGPoint.ccpAdd(center, CGPoint.ccp(-radius, 0)));
        }
        else {
            ((CCNode)aTarget).setPosition(CGPoint.ccpAdd(center, CGPoint.ccp(radius, 0)));
        }
    }

    @Override
    public void update(float t) {
        // XXX: shall I add % 360
        float rotate =  (startAngle + 360.0f * t );
        if (turn) {
            rotate *= -1;
        }
        target.setRotation(rotate);
        float fradian = (float) (rotate * Math.PI / 180.0f);
        CGPoint pos = CGPoint.ccp(center.x + radius * MathUtils.sin(fradian),
                          center.y + radius * MathUtils.cos(fradian));
        target.setPosition(pos);
    }
    @Override
    public CCIntervalAction reverse() {
        boolean result = !turn;
        return action(duration, result, center, radius);
    }
}

 

分享到:
评论

相关推荐

    cocos2d-x json字符串与cocos2d::Value转换工具

    该资源主要用于cocos2d-x中Value与json字符串的相互转换,提供从json文件读取为cocos2d::Value,cocos2d::Value写入到文件,cocos2d::Value转换为json字符串,json字符串转换为cocos2d::Value。json字符串转换成cocos...

    cocos2d-x 3.X 接收图片 base64 转码显示

    通过`cocos2d::Sprite::createWithTexture()`函数,传入刚刚创建的纹理,即可得到一个显示图片的精灵。 7. **布局与显示**:将精灵添加到场景(Scene)或层(Layer)中,设置位置、大小和旋转等属性,确保图片在屏幕上...

    cocos2d 总结:一

    cocos2d::Scene* HelloWorld::createScene() { auto scene = Scene::create(); auto layer = HelloWorld::create(); scene->addChild(layer); return scene; } ``` 在层中添加精灵: ```cpp Sprite* Hello...

    Cocos2d-x 地图行走的实现2

    `cocos2d::TMXLayer`类代表地图的一个单独层,而`cocos2d::TMXObjectGroup`则用于处理地图上的对象。 4. **Character Movement**:角色行走的实现通常通过碰撞检测和物理引擎来完成。在Classes文件夹中的源码可能...

    android cocos 2D范例

    在Android平台上,Cocos2D是一个非常流行的2D游戏开发框架,它允许开发者创建高质量的图形和交互式体验。这个“android cocos 2D范例”着重于展示如何利用Cocos2D-Android库来实现游戏功能,特别是针对鼠标点击事件...

    cocos2d-x 双指缩放,单指拖动,双击自动放大地图

    void MyLayer::onTouchesMoved(const std::vector<cocos2d::Touch*>& touches, cocos2d::Event* event) { // 获取两个触点的位置 cocos2d::Vec2 touch1Pos = touches[0]->getLocation(); cocos2d::Vec2 touch2Pos...

    cocos2d-android jar包全套.zip

    在Android平台上,Cocos2d-x是一个基于C++的版本,提供了原生的编程接口,同时也支持Java API,方便Android开发者使用。"cocos2d-android jar包全套.zip"这个压缩包包含了在Android上使用Cocos2d开发游戏所需的所有...

    cocos2d-xTest

    virtual bool onTouchBegan(cocos2d::Touch *touch, cocos2d::Event *event); virtual void onTouchMoved(cocos2d::Touch *touch, cocos2d::Event *event); virtual void onTouchEnded(cocos2d::Touch *touch, ...

    Cocos2d-x实战:JS卷——Cocos2d-JS开发

    资源名称:Cocos2d-x实战:JS卷——Cocos2d-JS开发内容简介:本书是介绍Cocos2d-x游戏编程和开发技术书籍,介绍了使用Cocos2d-JS中核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、性能优化、多平台...

    cocos2d-android-1资源:API文档

    在Android平台上,cocos2d-x是其主要实现,而“cocos2d-android-1”可能是该框架的一个特定版本。这个压缩包中的“cocos2d-android-1-doc”文件很可能是该版本的API文档,对于开发者来说是一份非常重要的参考资料。 ...

    Android Cocos2d-x 环境配置

    在Android平台上进行游戏开发时,Cocos2d-x是一个广泛使用的开源2D游戏引擎,它支持多平台,包括iOS、Android、Windows等。本篇将详细介绍如何在Windows XP SP3环境下配置Android Cocos2d-x的开发环境。 首先,我们...

    Cocos2d-Android架包

    Cocos2d-Android是一个基于Cocos2d-x框架的Android游戏开发引擎,它为开发者提供了在Android平台上构建2D游戏的强大工具集。这个“Cocos2d-Android架包”包含了所有必要的库和资源,使得开发者能够利用Cocos2d-...

    cocos2d-android.zip_android_android Cocos2d.jar_cocos2d android.

    《Cocos2d-android.jar:Android游戏开发的关键组件》 在Android游戏开发领域,Cocos2d-x是一个广泛使用的开源游戏引擎,它基于C++,并提供了多种语言接口,包括Java,使得开发者能够轻松地创建跨平台的游戏。本文...

    Cocos2D-X开发学习笔记-触屏事件使用示例

    virtual bool onTouchBegan(cocos2d::Touch *touch, cocos2d::Event *event) override { cocos2d::Vec2 touchLocation = touch->getLocation(); // 处理触摸开始的逻辑 return true; // 返回true表示继续监听...

    一张图片绕圆心做圆周运动

    在Cocos2d游戏开发框架中,`CCRoundBy`是一个关键的动作类,它允许你在2D场景中让精灵执行围绕指定圆心的圆形路径运动。这个功能在创建动态效果或者模拟物理现象时非常有用,比如模拟星球轨道、制作旋转的特效等。`...

    cocos2d-x手势识别(单击、双击、各形状)

    bool onTouchBegan(cocos2d::Touch *touch, cocos2d::Event *event) { // 记录开始触摸的位置 startTouchPosition = touch->getLocation(); return true; } void onTouchEnded(cocos2d::Touch *touch, cocos2d::...

    cocos2d-android.jar.zip_CoCos2d_android jar_android game_cocos2d

    cocos2d-android游戏引擎是著名游戏引擎cocos2d游戏引擎的Android版。cocos2d-android游戏引擎性能优越、易学、可以进行纯java编程、具有极高的研 究价值、大大的降低了开发者的学习成本。您只需要一台普通配置的...

    cocos2d-android

    首先,cocos2d-android是基于C++的cocos2d-x的一个分支,它充分利用了Android的原生API,使得游戏运行更高效、性能更优化。cocos2d-x最初是为iOS平台设计的,但其跨平台特性使得开发者可以轻松地将游戏从iOS移植到...

    Cocos2d-x 自定义可接受处理触摸信息精灵类

    virtual bool touchBegan(cocos2d:: CCTouch* touch, cocos2d::CCEvent* event); virtual void touchMoved(cocos2d::CCTouch* touch, cocos2d::CCEvent* event); virtual void touchEnded(cocos2d::CCTouch* ...

    Cocos2d-x实战:C++卷(2版)源代码

    Cocos2d-x是一个开源的、跨平台的游戏开发框架,广泛应用于iOS、Android、Windows等多个操作系统。本书以C++语言为主要编程语言,提供了丰富的实践案例和源代码,帮助读者深入理解和掌握Cocos2d-x的使用。 在Cocos...

Global site tag (gtag.js) - Google Analytics