Cocos2D JS花栗鼠PhysicsSprite移动操作在Android手机中不起作用
Cocos2D-JS Chipmunk PhysicsSprite Move action not working in Android phone
我正在尝试开发一个简单的跨平台游戏,并尝试使用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手机中移动。
注意:我使用花栗鼠物理引擎
我不知道这是真正的解决方案,也不知道这应该被视为一种变通方法,但下面的代码适用于web和Android。但仍然不知道为什么问题中的代码不适用于Android,而适用于网络。(如果两者都不起作用,那就更有意义了…)
我试着移动精灵的身体而不是它自己。新的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);
}
moveWithVelocity
是我在同一层中创建的自定义函数,以特定的速度将身体移动到目的点:
moveWithVelocity: function(body, destination, velocity){
var deltaX = destination.x - body.p.x;
var deltaY = destination.y - body.p.y;
var distance = Math.sqrt(Math.pow(deltaX,2) + Math.pow(deltaY,2));
var time = distance / velocity;
var velocityX = deltaX / time;
var velocityY = deltaY / time;
//start the action with the calculated velocity in the calculated direction
body.applyImpulse(cc.v(velocityX, velocityY), cc.v(0,0));
//stop the sprite (or body here) when duration of movement is time out (or when the sprite/body arrives its destination)
setTimeout(function(){
body.setVel(cc.v(0,0));
}, time*1000);
}
希望这能帮助任何遇到同样问题的人。
相关文章:
- Ionic应用程序无法识别android手机中的语音
- 可以't从android手机调用全局javascript函数
- 现在是否可以在Android手机中使用HTML5或混合应用程序读取智能卡
- 在Android手机间隙应用程序中单击后退按钮时强制关闭
- 通过JavaScript检测和区分Android平板电脑和Android手机
- 我的 mailto 链接中的换行符在 Android 手机上已损坏
- 通过HTML5或JavaScript启动Android手机前置摄像头
- Android手机间隙滚动是非常斩波
- 地理定位可以在网络浏览器上工作,但不能在android手机浏览器上工作
- 在网络浏览器中的android手机中停止后退行为
- 使用phonegap和Sencha Touch访问Android手机联系人
- Cocos2D JS花栗鼠PhysicsSprite移动操作在Android手机中不起作用
- add to homescreen'android手机的弹出窗口
- HTML jquery onclick事件不能在Android手机上动态创建的链接上工作
- 在非本机应用程序中将号码添加到iPhone或Android手机联系人列表中
- 连接到web应用程序的Android手机
- 如何在android手机中嵌入字体样式
- 使用JavaScript在Android手机上发送/读取短信
- requestFileSystem不适用于android手机
- jquery代码没有在android手机上运行