- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们正在使用 createJS,现在我正在努力进行 HitTest 。
我收到此错误:
"ss.js:203 Uncaught TypeError: Cannot read property 'x' of undefined
at hitTest (ss.js:203)
at doCollisionChecking (ss.js:215)
at heartBeat (ss.js:238)
at Function.b._dispatchEvent (createjs-2015.11.26.min.js:12)
at Function.b.dispatchEvent (createjs-2015.11.26.min.js:12)
at Function.a._tick (createjs-2015.11.26.min.js:12)
at a._handleTimeout (createjs-2015.11.26.min.js:12)"
我认为问题出在 2 个对象的 x 位置上,但其中一个是玩家控制的 Angular 色,另一个对象具有随机的 x 值。
我发现的所有 HitTest 示例始终由一个静态对象和一个移动对象组成,但这次它们都在移动,我不知道该怎么做。
var stage, hero, queue, circle, coin;
var coins = [];
var Score, tekst1, tekst2;
var speed = 3;
var keys = {
u: false,
d: false,
l: false,
r: false
};
var settings = {
heroSpeed: 15
};
function preload() {
"use strict";
stage = new createjs.Stage("ss");
queue = new createjs.LoadQueue(true);
queue.installPlugin(createjs.Sound);
queue.loadManifest([
{
id: 'Vacuum',
src: "img/Vacuum.png"
},
{
id: 'Dust',
src: "img/dust.png"
},
{
id: 'Pickup',
src: "sounds/pickup.mp3"
},
{
id: 'Suger',
src: "sounds/suger.wav"
},
]);
queue.addEventListener('progress', function () {
console.log("hi mom, preloading");
});
queue.addEventListener('complete', setup);
}
function setup() {
"use strict";
window.addEventListener('keyup', fingerUp);
window.addEventListener('keydown', fingerDown);
circle = new createjs.Bitmap("img/Vacuum.png");
circle.width = 40;
circle.height = 90;
stage.addChild(circle);
circle.y = 570;
circle.x = 460;
Score = new createjs.Text("0", "25px Impact", "white");
Score.x = 900;
Score.y = 680;
Score.textBaseline = "alphabetic";
stage.addChild(Score);
tekst1 = new createjs.Text("Score", "25px Impact", "white");
tekst1.x = 740;
tekst1.y = 680;
tekst1.textBaseline = "alphabetic";
stage.addChild(tekst1);
tekst2 = new createjs.Text("Bombs fallin", "40px Impact", "white");
tekst2.x = 10;
tekst2.y = 50;
tekst2.textBaseline = "alphabetic";
stage.addChild(tekst2);
createjs.Ticker.setFPS(30);
createjs.Ticker.addEventListener('tick', heartBeat)
}
function addCoins() {
coin = new createjs.Bitmap("img/dust.png");
coin.x = Math.random() * 900;
coin.width = 36;
coin.height = 50;
coins.push(coin);
stage.addChild(coin);
}
function moveCoins() {
for (var i = 0; i < coins.length; i++) {
coins[i].y += speed;
}
for (var j = 0; j < coins.length; j++) {
if (coins[j].y > 650) {
console.log("hejsa");
stage.removeChild(coins[j]);
coins.splice(j, 1);
}
}
}
function maybeAddCoin() {
var rand = Math.random() * 500;
if (rand < 5) {
addCoins();
}
}
function fingerUp(e) {
"use strict";
//createjs.Sound.stop("Suger")
switch (e.keyCode) {
case 37:
keys.l = false;
break;
case 38:
keys.u = false;
break;
case 39:
keys.r = false;
break;
case 40:
keys.d = false;
break;
}
}
function fingerDown(e) {
"use strict";
switch (e.keyCode) {
case 37:
keys.l = true;
break;
case 38:
keys.u = true;
break;
case 39:
keys.r = true;
break;
case 40:
keys.d = true;
break;
}
}
function moveSlime() {
"use strict";
if (keys.l) {
circle.x -= settings.heroSpeed;
if (circle.x < 0) {
circle.x = 0;
}
if (circle.currentDirection != "left") {
circle.currentDirection = "left";
//createjs.Sound.play("Suger");
keys.u = false;
keys.r = false;
keys.d = false;
}
}
if (keys.r) {
circle.x += settings.heroSpeed;
if (circle.x > 960) {
circle.x = 960;
}
if (circle.currentDirection != "right") {
circle.currentDirection = "right";
//createjs.Sound.play("Suger")
keys.u = false;
keys.l = false;
keys.d = false;
}
}
}
function hitTest(rect1, rect2) {
if (rect1.x >= rect2.x + rect2.width || rect1.x + rect1.width <= rect2.x ||
rect1.y >= rect2.y + rect2.height || rect1.y + rect1.height <= rect2.y)
{
return false;
}
return true;
}
function doCollisionChecking() {
for (var k = coins.length - 1; k >= 0; k--) {
if (hitTest(circle, coin[k])) {
console.log("ramt");
}
}
}
function scoreTimer() {
//Score.text = parseInt(Score.text + 10);
}
function heartBeat(e) {
"use strict";
doCollisionChecking()
maybeAddCoin()
//addCoins()
moveCoins()
scoreTimer()
moveSlime()
stage.update(e);
}
window.addEventListener('load', preload);
最佳答案
显然您的一个元素未定义(circle
或 coins[k]
)。我首先要弄清楚是哪一个。
我注意到的一件重要的事情是,在碰撞检查时您正在寻找 rect.width
。 EaselJS 元素 don't have a width
property ,因此您应该使用 getBounds()
,一旦位图加载,它将与位图一起使用。
// Example
var bounds = rect.getBounds();
var w = bounds.width, h = bounds.height;
希望有帮助!
关于javascript - CreateJS 中 2 个移动物体之间的碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44293548/
如何在 createjs 中显示自定义光标?我在 Canvas 上渲染了多个图像/位图。我希望每当我单击特定位图时光标更改为特定图像。也就是说,单击图片 1 时,光标将变为画笔图像,单击图片 2 时,
我在 CreateJS/TweenJS 中有多个 Tweens: createjs.Tween.get(elem1).to({..}); createjs.Tween.get(elem2).to({.
我在 creatJS 方面遇到问题,希望您能提供帮助。 var stage = new createjs.Stage(canvas); 我收到此错误: angular.js:13642 Refere
我的项目是从服务器加载的。我使用 preloadjs 加载图像,然后使用它创建位图。加载图像后,可以使用以下命令创建位图新的createjs.Bitmap(路径);如果使用 firfox,但在使用 C
我正在制作一个射击游戏,其中我需要通过将子弹绑定(bind)到“tick”事件来更新子弹的状态,但是当调用删除方法将它们从“tick”事件中删除时,它不会将其删除。创建新实例后,它会不断更新,而不是绑
我试图将这个 h1 插入到 canvas 中。但它没有显示。无论如何,将 w3school html 集成到 Canvas 中,而无需使用 easeljs 程序创建文本。我将其添加到 Canvas 内
如何在createjs中仅在对象的右侧和底部绘制阴影。物体上或顶部和左侧没有阴影。 阴影仅包含 4 个参数 1.阴影的颜色 2. x 3. 年 4.模糊效果 但它没有说明 4 个不同的方面。 var
在 CreateJs 中,Firefox 呈现的文本对象的顶部位置与其他浏览器略有不同,而形状对象没有显示这种差异。 例如, this.text = new cjs.Text("Click to St
希望有人能帮忙。 我在 CreateJS 中有一个游戏工作正常,添加了暂停按钮的功能,也工作正常,除了暂停按钮不可见,但我的所有其他对象都是:(如果我单击我知道暂停按钮所在的位置该功能有效,但我只是看
我正在尝试使用 createjs 版本 8 中的新继承模型。我想让 Tile 继承自 createjs.Shape这是最基本的代码。 //This is the Tile constructor fu
这个问题已经有答案了: easeljs not showing bitmap (1 个回答) 已关闭 6 年前。 我怀疑答案就在 PreloadJs 中但是,我已经在我的 code 中删除了对它的修改
我正在使用这个 fiddle 中的代码: https://codepen.io/rauluranga/pen/KwoBdE 我想使用此代码使我的oes.container 中的每个对象都具有随机移动。
我正在开发一个 createjs 游戏,其中图像保存在容器内。我想将图像补间到屏幕上的某个位置并将图像切换到另一个图像。几秒钟后,我想从 Canvas /屏幕中删除新图像。 目前,我正在将 (evt)
我尝试将自己的方法添加到 Tween 类中以暂停/恢复所有补间。这就是我所拥有的: createjs.Tween.pauseAllTweens = function() { for ( var
这是图形: http://snag.gy/aVFGA.jpg 大矩形是 Canvas 元素,小矩形是 Canvas 中的图像对象。我想找到离左边的实际距离是多少。 值是我在控制台中看到的值: regX
我不知道我的代码有什么问题。我对 javascript 很陌生。有时 createjs 会工作,有时则不会。这没有意义,因为我正在从其他人的教程中复制精确的代码。
所以, 我刚开始学习 CreateJS,我遇到了我的第一个问题:我无法让补间工作(我希望它应该工作)。 示例如下:http://www.hakoniemi.net/labs/createjs-test
我想更改父容器内 2 个子容器的坐标。最初,我循环遍历父容器的子容器并单独更改它们的 x,y...但随后更改父容器的 x,y 更有意义>... 问题是...我需要获取每个子项的单独更改坐标...但是更
我尝试通过 SoundJS 声音注册加载声音,并收到以下错误: createjs.js:15 Uncaught Error: Type not recognized. 我认为 soundjs 库在定位
所以我尝试使用 Createjs 对矩形大小进行动画处理。我发现有两种方法可以创建矩形。要么: var rectangle = new createjs.Rectangle(0,0,100,100);
我是一名优秀的程序员,十分优秀!