画布上的JavaScript颜色检测w/getImageData
JavaScript Color Detection w/ getImageData on Canvas
我在使用getImageData函数时遇到问题。我正在尝试制作一个程序,当你点击红色时,它会检测并弹出一个警告框。我已经编写了一个名为"碰撞测试"的碰撞检测函数,虽然我找不到任何问题,但它不起作用。我已经包含了下面的整个代码,将其分为几个部分以便于阅读。
(function () {
var requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;
window.requestAnimationFrame = requestAnimationFrame;
})();
//========================= B E G I N =======================================
window.onload = function init() {
var canvas = document.getElementById("canvas");
var c = canvas.getContext("2d");
canvas.width = 600;
canvas.height = 600;
render();
}
//======================== O B J E C T S =====================================
var player = {
x: 50,
y: 50,
xvel: 0,
yvel: 0,
}
//===================== I N P U T & A D J U S T ============================
var keys = [];
window.addEventListener("keydown",function(e) {
keys[e.keyCode] = true;
});
window.addEventListener("keyup",function(e) {
keys[e.keyCode] = false;
});
function input() {
if (keys[37]) {
player.xvel -= 5
}
if (keys[39]) {
player.xvel += 5
}
if (keys[38]) {
player.yvel -= 5
}
if (keys[40]) {
player.yvel += 5
}
player.x += player.xvel;
player.y += player.yvel;
player.xvel = 0;
player.yvel = 0;
collideTest();
}
//======================= C O L L I S I O N ================================
function collideTest(){
var canvas = document.getElementById("canvas");
var c = canvas.getContext("2d");
var whatColor = c.getImageData(player.x - 5, player.y - 5,60,60);
for (var i = 0; i < whatColor.data.length; i += 4) {
if (whatColor.data[i] == 255) {
alert("red");
}
}
}
//========================== R E N D E R ===================================
function render(){
var canvas = document.getElementById("canvas");
var c = canvas.getContext("2d");
canvas.width = 600
input();
c.fillStyle = "red"
c.fillRect(300,300,50,50);
c.fillStyle = "rgb(106,8,136)"
c.fillRect(player.x,player.y,50,50)
requestAnimationFrame(render);
}
当我用"0"替换collestTest()中的"255"时,它会一次又一次地弹出警报,所以它没有/完全/坏掉。我只是不确定发生了什么事。
谢谢你的帮助!!
您的计算是正确的。只需将render()函数内部的input()调用移动到两个矩形创建之间:
c.fillStyle = "red"
c.fillRect(300,300,50,50);
input()
c.fillStyle = "rgb(106,8,136)"
c.fillRect(player.x,player.y,50,50)
获取图像数据将获得整个画布的快照,所以如果你每次都在红色的顶部绘制紫色,那么在你检测到的坐标处,它总是紫色的。
我可以建议使用console.log()而不是alert()来输出结果吗?)
相关文章:
- 如何检测是否有溢出
- 如何检测用于WebGL的专用或集成显卡
- 防止Alt+Shift默认操作或检测多种操作系统语言的Javascript
- 如何在使用selectBoxIt JQuery插件时检测选项更改
- 如何使用密码检测网络中的状态连接
- 使用JavaScript检测Flash
- 在不阻止默认行为的情况下检测IE10中的缩放
- 检测个位数整数时正在转换毫秒
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- 动态插入的表:JQuery未检测到最后一行
- 检测页面上某个元素中选择(突出显示)或单击的内容
- jQuery检测浏览器是否支持Zoom
- 检测iframe是否跨域的愚蠢方法
- 检测图像分辨率
- 如何检测第三方广告服务器请求
- 我是否可以检测到javascript正在被卸载(作为调试模式)
- 当没有文本输入聚焦时检测空格键按下
- 用于检测颜色冲突的 getImageData 不起作用
- 画布上的JavaScript颜色检测w/getImageData
- 使用getImageData的JS Canvas碰撞检测