This gives output:
Lee Xian Sheng label hit
function tick(event) {
for (var i = 0 ; i < allMyLabels.length; i++) {
var pt = allMyLabels[i].globalToLocal(stage.mouseX, stage.mouseY);
if (allMyLabels[i].hitTest(pt.x, pt.y)) {
log(allMyLabels[i].text + " label hit");
}
}
stage.update(event);
}
When I take it out of the tick function, however, I get:
Uncaught TypeError: Cannot call method 'globalToLocal' of undefined
But, as you can see from the comment, allMyLabels[]
is not empty, and has a createJS label in it...
cn_label = new createjs.Text(itemObj.cn_name, "14px Arial", "white");
cn_label.y = -45;
//loop through all labels, check hittest for each
allMyLabels.push(cn_label);
HitTest function:
function hitTest() {
for (var i = 0 ; i < allMyLabels.length; i++) {
log("label: " + allMyLabels[i].text); //NOT undefined, gives: label: Lee Xian Sheng, as expected
allMyLabels[i].addEventListener("mouseover", function() {
var pt = allMyLabels[i].globalToLocal(stage.mouseX, stage.mouseY);
if (allMyLabels[i].hitTest(pt.x, pt.y)) {
log(allMyLabels[i].text + " label hit");
}
stage.update();
});
}
}
When I start the game, I create my canvas, stage, objects and labels, then call function hitTest()
, then add enableMouseOver(20) to stage.
function init() {
canvas = document.getElementById("demoCanvas");
start();
}
function start() {
stage = new createjs.Stage("demoCanvas");
stage.mouseMoveOutside = true;
//Create Objects
drawMap();
createInitialNPC();
stage.enableMouseOver(20);
//Animation ticker
createjs.Ticker.addEventListener("tick", tick);
createjs.Ticker.setFPS(60);
keyEvents();
stage.update();
}
Why do I get this output?