javascript - 难以实现handleOnPress功能
问题描述
我正在尝试实现该handleOnPress
功能,代码由教科书提供,这令人困惑,因为它似乎没有按预期工作,实际上它什么也没做。
该功能应该允许我单击记忆游戏中的方块,如果方块颜色相同,则两个选定的方块都会消失,如果您单击同一个方块两次,则功能会重置,如果匹配两个不是同样的功能重置。
如果有人可以查看并指出他们看到的任何错误,将不胜感激,谢谢!
<!DOCTYPE html>
<html>
<head>
<title>Recipe: Drawing a square</title>
<script src="easel.js"></script>
<script type="text/javascript">
var canvas;
var stage;
var squareSide = 70;
var squareOutline = 5;
var max_rgb_color_number = 255;
var gray = createjs.Graphics.getRGB(20, 20, 20);
var placementArray = [];
var highlight = createjs.Graphics.getRGB(255, 255, 0);
var tileClicked;
function init() {
var rows = 6;
var columns = 6;
var squarePadding = 10;
canvas = document.getElementById('myCanvas');
stage = new createjs.Stage(canvas);
var numberOfTiles = rows*columns;
setPlacementArray(numberOfTiles);
for(var i=0;i<numberOfTiles;i++){
var placement = getRandomPlacement(placementArray);
if(i % 2 === 0){
var color = randomColor();
}
square = drawSquare(color);
square.color = color;
square.x = (squareSide+squarePadding) * (placement%columns);
square.y = (squareSide+squarePadding) * Math.floor(placement/columns);
stage.addChild(square);
square.onPress = handleOnPress;
stage.update();
}
}
function drawSquare(color) {
var shape = new createjs.Shape();
var graphics = shape.graphics;
graphics.setStrokeStyle(squareOutline);
graphics.beginStroke(gray);
graphics.beginFill(color);
graphics.rect(squareOutline, squareOutline, squareSide, squareSide);
return shape;
}
function randomColor(){
var color = Math.floor(Math.random()*max_rgb_color_number);
var color2 = Math.floor(Math.random()*max_rgb_color_number);
var color3 = Math.floor(Math.random()*max_rgb_color_number);
return createjs.Graphics.getRGB(color, color2, color3);
}
function setPlacementArray(numberOfTiles){
for(var i=0;i<numberOfTiles;i++){
placementArray.push(i);
}
}
function getRandomPlacement(placementArray){
randomNumber = Math.floor(Math.random()*placementArray.length);
return placementArray.splice(randomNumber, 1)[0];
}
function handleOnPress(event){
var tile = event.target;
if(!!tileClicked === false){
tile.graphics.setStrokeStyle(squareOutline).beginStroke(highlight)
.rect(squareOutline, squareOutline, squareSide, squareSide);
tileClicked = tile;
}
else{
if(tileClicked.color === tile.color && tileClicked !== tile){
tileClicked.visible = false;
tile.visible = false;
}
else{
tileClicked.graphics.setStrokeStyle(squareOutline).beginStroke(gray)
.rect(squareOutline, squareOutline, squareSide, squareSide);
}
tileClicked = null;
}
stage.update();
}
</script>
</head>
<body onload="init()">
<canvas id="myCanvas" width="960" height="600"></canvas>
</body>
</html>
解决方案
-style 处理程序(onClick、onMouseDown 等)在onEvent
很久以前就被弃用和删除(版本 0.7.0,2013 年 9 月 25 日)。
相反,使用事件,例如
square.addEventListener("mousedown", handleOnPress);
或快捷on()
方式:
square.on("mousedown", handleOnPress);
还要注意没有“新闻”事件。有一个“mousedown”事件,以及拖放式事件的“pressmove”/“pressup”事件。
以下是所有显示对象上的事件列表:https ://createjs.com/docs/easeljs/classes/DisplayObject.html#event_mousedown
我不知道这是否能解决所有问题,但它应该让你的点击处理程序触发。
推荐阅读
- angularjs - 使用 Angularjs/Spring 上传/下载 uint8array
- multithreading - 本机内存分配 (malloc) 未能分配字节
- mysql - 我如何从多行获取单个数据(SMS 问题)
- python - 逻辑回归:fit() 缺少 1 个必需的位置参数:'y'
- linear-programming - 如何用单纯形法动态定义约束?
- css - 如何在 2 列中动态构建内容
- php - Angular 和 PHP 服务器在同一个端口
- android - 无法使用 adb 重新安装拆分的 APK
- sql-server - 使用 powershell 导出 SQL 查询输出
- r - 无法在 rStudio 上加载 rJava