06 游戏开发-向量

精灵对象根据实际情况使用向量或者位置进行改变位置,哪个方便使用哪个。

1.向量

计算方向和距离,故方便精灵移动距离和方向

2.使用CGPoint对象代表向量

package com.su.cocos2dhelloworld;

import org.cocos2d.actions.interval.CCJumpBy;
import org.cocos2d.actions.interval.CCMoveBy;
import org.cocos2d.actions.interval.CCMoveTo;
import org.cocos2d.layers.CCLayer;
import org.cocos2d.nodes.CCSprite;
import org.cocos2d.types.CGPoint;

public class GameVectorLayer extends CCLayer {

    CCSprite mCCSpriteA;
    CCSprite mCCSpriteB;

    public GameVectorLayer() {
        mCCSpriteA = CCSprite.sprite("player.png");
        mCCSpriteB = CCSprite.sprite("player.png");
        this.addChild(mCCSpriteA);
        this.addChild(mCCSpriteB);

        CGPoint initPoint = CGPoint.ccp(400, 400);
        mCCSpriteA.setPosition(initPoint);
        mCCSpriteB.setPosition(initPoint);
    }

    // 向量加法
    private void vectorAdd(CGPoint initPoint) {
        CGPoint deltaPoint = CGPoint.ccp(0, 200);
        CGPoint targetPoint = CGPoint.ccpAdd(initPoint, deltaPoint);
        mCCSpriteB.setPosition(targetPoint);
    }

    // 向量减法
    private void vectorSub(CGPoint initPoint) {
        CGPoint deltaPoint = CGPoint.ccp(0, 200);
        CGPoint targetPoint = CGPoint.ccpSub(initPoint, deltaPoint);
        mCCSpriteB.setPosition(targetPoint);
    }

    // 单位向量乘法
    private void vectorMult(CGPoint initPoint) {
        CGPoint targetPoint = CGPoint.ccpMult(initPoint, 2);
        mCCSpriteB.setPosition(targetPoint);
    }

    private void moveBy() {
        CGPoint targetPoint = CGPoint.ccp(100, 100);
        CCMoveBy mCCMoveBy = CCMoveBy.action(3, targetPoint);
        mCCSpriteB.runAction(mCCMoveBy);
    }

    private void moveTo() {
        CGPoint targetPoint = CGPoint.ccp(100, 100);
        CCMoveTo mCCMoveTo = CCMoveTo.action(3, targetPoint);
        mCCSpriteB.runAction(mCCMoveTo);
    }

    // 相对于当前位置跳跃
    private void jumpBy() {
        CGPoint targetPoint = CGPoint.ccp(300, 100);
        CCJumpBy mCCJumpBy = CCJumpBy.action(3, targetPoint, 200, 3);
        mCCSpriteB.runAction(mCCJumpBy);
    }
}

3.基于向量的运算

    // 向量加法
    private void vectorAdd(CGPoint initPoint) {
        CGPoint deltaPoint = CGPoint.ccp(0, 200);
        CGPoint targetPoint = CGPoint.ccpAdd(initPoint, deltaPoint);
        mCCSpriteB.setPosition(targetPoint);
    }

    // 向量减法
    private void vectorSub(CGPoint initPoint) {
        CGPoint deltaPoint = CGPoint.ccp(0, 200);
        CGPoint targetPoint = CGPoint.ccpSub(initPoint, deltaPoint);
        mCCSpriteB.setPosition(targetPoint);
    }

    // 单位向量乘法
    private void vectorMult(CGPoint initPoint) {
        CGPoint targetPoint = CGPoint.ccpMult(initPoint, 2);
        mCCSpriteB.setPosition(targetPoint);
    }

4.CCMoveBy与CCJumpBy

    private void moveTo() {
        CGPoint targetPoint = CGPoint.ccp(100, 100);
        CCMoveTo mCCMoveTo = CCMoveTo.action(3, targetPoint);
        mCCSpriteB.runAction(mCCMoveTo);
    }

    // 相对于当前位置跳跃
    private void jumpBy() {
        CGPoint targetPoint = CGPoint.ccp(300, 100);
        CCJumpBy mCCJumpBy = CCJumpBy.action(3, targetPoint, 200, 3);
        mCCSpriteB.runAction(mCCJumpBy);
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

法迪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值