我正在尝试开发一个简单的跨平台游戏,并尝试使用Cocos2D-JS将带有Body的PhysicsSprite移动到我触摸/点击的位置。
以下是我的代码:
var TAG_SPRITE = 1;
var AnimationLayer = cc.Layer.extend({
space:null,
ctor:function (space) {
this._super();
this.space = space;
this.init();
},
init:function () {
this._super();
var winsize = cc.director.getWinSize();
//init physics sprite
var spriteHead = new cc.PhysicsSprite(res.Head_png);
var headContentSize = spriteHead.getContentSize();
//init body
var headBody = new cp.Body(1, cp.momentForBox(1, headContentSize.width, headContentSize.height));
headBody.p = cc.p(winsize.width / 2, winsize.height / 3);
this.space.addBody(headBody);
//init shape
var headShape = new cp.CircleShape(headBody, headContentSize.width / 2, cp.v(0, 0));
headShape.setFriction(0.3);
headShape.setElasticity(0.8);
this.space.addShape(headShape);
spriteHead.setBody(headBody);
this.addChild(spriteHead, 0, TAG_SPRITE);
//for mobile
if('touches' in cc.sys.capabilities ){
cc.eventManager.addListener({
event: cc.EventListener.TOUCH_ONE_BY_ONE,
swallowTouches: true,
onTouchBegan:function (touch, event) {
cc.log('touch began');
event.getCurrentTarget().moveSprite(touch.getLocation());
return true;
},
onTouchMoved: function (touch, event) {
},
onTouchEnded: function (touch, event) {
},
onTouchCancelled: function (touch, event) {
}
}, this);
}
//for desktop
else if ('mouse' in cc.sys.capabilities ) {
cc.eventManager.addListener({
event: cc.EventListener.MOUSE,
onMouseUp: function (event) {
event.getCurrentTarget().moveSprite(event.getLocation());
}
}, this);
}
},
moveSprite:function(position) {
cc.log('move to: ' + position.x + ',' + position.y);
var sprite = this.getChildByTag(TAG_SPRITE);
var moveAction = new cc.moveTo(1, position);
sprite.runAction(moveAction);
}
});
当我从logcat看到日志时,它可以处理触摸事件但无法移动精灵。当我将PhysicsSprite转换为Sprite对象并删除所有其他Body和Shape内容时,它可以移动到我触摸的位置。 问题是我可以在浏览器中移动PhysicsSprite而我在Android手机中无法移动它。
注意:我使用的是Chipmunk物理引擎
答案 0 :(得分:0)
我不知道这是真正的解决方案,还是应该被视为一种解决方法,但下面的代码适用于网络和Android。但是仍然不知道为什么问题中的代码对于Android而言不起作用。 (如果两者都不起作用会更有意义......)
我试图移动精灵的身体而不是自己。新的 def starts_with_consonant? s
return /^[^aeiou]/i === s
end
方法就是这样:
moveSprite
moveSprite: function(sprite){
cc.log('move to: ' + position.x + ',' + position.y);
var sprite = this.getChildByTag(TAG_SPRITE);
var body = sprite.getBody();
var velocity = 300;
this.moveWithVelocity(body, position, velocitiy);
}
是我在同一个图层中创建的自定义函数,使用特定的速度将Body移动到目标点:
moveWithVelocity
希望这有助于任何人遇到同样的问题。