javascript - 如何将实体移动到鼠标位置并朝其旋转

标签 javascript html

我正在阅读this tuts+ 上有关如何使用 CreateJS 让宇宙飞船跟随光标的文章, 我想知道如何使实体向鼠标位置移动但也面向它旋转。

这是一个fiddle没有旋转的示例 和代码

var canvas = document.getElementById("Canvas");
var ship;
var stage;
var assets;
var loader;
var serverString = "http://source.tutsplus.com/gamedev/authors/JamesTyner/SmoothMoves/";
var stageHeight = 600;
var stageWidth = 600;
var shipHeight = 64;
var shipWidth = 64;
var easingAmount = 0.15;
var text;
stage = new createjs.Stage(canvas);
assets = [];
manifest = [{
    src: serverString + "ship.png",
    id: "character"
}];

loader = new createjs.LoadQueue(false);
loader.onComplete = handleComplete;
loader.onFileLoad = handleFileLoad;
loader.loadManifest(manifest);

function handleFileLoad(event) {
    var id = event.item.id;
    var result = loader.getResult(id);
    ship = new createjs.Bitmap(result);
    ship.x = (stageWidth / 2) - shipWidth;
    ship.y = stageHeight - shipHeight;
    ship.regX = shipWidth/2;
    ship.regY = shipHeight/2;
}

function handleComplete() {
    stage.addChild(ship);
    text = new createjs.Text("Click To Activate", "20px Arial", "#000000");
    text.x = 200;
    text.y = stageHeight / 2;
    stage.addChild(text);
    stage.update();
}

stage.onMouseDown = function () {
    stage.removeChild(text);
    createjs.Ticker.addEventListener("tick", tick);
};

function tick(event) {
   var xDistance = stage.getStage().mouseX - ship.x;
   var yDistance = stage.getStage().mouseY - ship.y;
   var distance = Math.sqrt(xDistance * xDistance + yDistance * yDistance);
    if (distance > 1) {
        ship.x += xDistance * easingAmount;
        ship.y += yDistance * easingAmount;
    }
    stage.update();
}

谢谢大家

最佳答案

首先计算船舶与鼠标指针之间的 Angular (以度为单位):

var mousePointerPosition = {
        x: stage.getStage().mouseX,
        y: stage.getStage().mouseY
    };

var spaceShipPosition = {
        x: ship.x,
        y: ship.y
    };

var angle = Math.atan2(
        spaceShipPosition.y - mousePointerPosition.y,
        spaceShipPosition.x - mousePointerPosition.x
    ) * 180 / Math.PI;

然后旋转飞船:

ship.rotation = ( angle > 180 ? -angle : angle ) + 90;

如果 Angular 超过180,我们会反转 Angular 以使船转向另一个方向。另外,我还在 Angular 中添加了 + 90 ,因为与鼠标位置相比,船转动了 90 度。

Js fiddle :http://jsfiddle.net/nkZjR/200/

关于javascript - 如何将实体移动到鼠标位置并朝其旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28716693/

相关文章:

html - 如何将内容放入 div 元素中?

JavaScript 宽度检查以禁用事件

javascript - 如何将div的内容保存为图片?

html - 使用固定页脚使列位于页面底部

javascript - 为什么我不能将 String.prototype.toLowerCase 与 underscore.js 链接起来?

html - 如何编写一个停止/中断无限循环 Rails 应用程序的 Web 按钮?

javascript - 增加事件监听器事件以监听特定 ID(card-1、card-2、card-3 等...)

javascript - 使用数字 1 - 20 加载 asp 下拉列表

javascript - 选择警告框选项时跳转页面

javascript - jQuery 新手 : how can I pass arguments to an event handler function?