精灵对象根据实际情况使用向量或者位置进行改变位置,哪个方便使用哪个。
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);
}