我正在使用html5画布和javascript开发一个迷宫游戏(我更喜欢使用jquery库进行编码)这个游戏是为移动设备而设计的,我对使用触摸事件是完全陌生的
在画布上,我添加了迷宫图像-黑白gif迷宫。
我将使用trouch在迷宫中导航。
以下是我所做的:
>
为触摸添加事件侦听器:
window.add事件监听器(触摸移动,句柄移动,假);
添加了处理移动的功能:
函数handleMove(e){e.preventDefault();
// Check the touch position on canvas
var checkx = event.targetTouches[0].pageX - canvas.offsetLeft;
var checky = event.targetTouches[0].pageY - canvas.offsetTop;
var collision = checkcollision(checkx,checky);
if (collision == 0){
x = checkx;
y = checky;
draw(imgWidth,imgHeight,ctx);
} else {
// HERE IS THE PROBLEM - WHAT SHOULD I DO?
//BECAUSE IF THE TOUCH EVENT CONTINUES, THE COLLISION
// FUNCTION WILL HIT THE WHITE COLOR AGAIN
//AND THE BALL WHICH I AM NAVIGATING THROUGH THE MAZE WILL
// PASS THE BORDER.
}
};
检查碰撞-这是我的问题
当我碰到黑色边界时我该怎么办?
如果用户继续移动并且触摸事件继续,当他再次击中白色时,我正在迷宫中导航的球跳过黑色边界。
所以,我可以停止活动...有什么想法吗?
这里是碰撞功能:
function checkcollision(checkx, checky){
var collision = 0;
var imgd = ctx.getImageData(checkx, checky, 15, 15);
pix = imgd.data;
for (var i = 0; n = pix.length, i < n; i += 4){
if (pix[i] == 0) {
collision = 1;
} else if(pix[i] == 255 && pix[i + 1] == 0){
winner = "yes";
}
}
//console.log("colision fromn the function: "+collision);
return collision;
}
您的另一个问题已删除,因此我将在此处回答:
我猜你是在问函数的链接,或者说它是如何工作的。
看一看:
//chaining basics
var obj = {
a: function(){
//do something...
return this;
},
b: function() {//do somethingelse
return this;
}
};
然后你可以把这样的东西叫做... obo. a(). b();
因此,在您的示例中,需要执行以下操作:
function makeObj(id){
var ele = document.getElementById(id);
this.red= function(){
ele.style.backgroundColor='red';
return this;
};
this.blue= function(){
ele.style.backgroundColor='red';
return this;
};
//and so on...
}
var p = new makeObj('paragraph1');
或者如果你像这样写makeObj函数,你可以像这样写
var p = makeObj('paragraph1'); //remember $ is just a character. Which you can use too.
function makeObj(id){
var ele = document.getElementById(id);
return {
red: function(){
ele.style.backgroundColor='red';
return this;
},
blue: function(){
ele.style.backgroundColor='blue';
return this;
}
//and so on...
};
}
现在您可以执行以下操作:
var p = makeObj('idofelem');
p.red();
p.red().blue();
p.blue():
这里有一个想法:
我假设您随时都知道球的当前位置,并且用户不断触摸屏幕以移动,但不能停止触摸,将手指移动到新位置,然后再次开始触摸以将球移动到该点。
当checkcollision
函数返回1
时,您知道碰撞的位置。您可以做的是保存该位置并设置一个标志,以防止球更新其位置,除非触摸事件在球和碰撞之间。这将防止用户穿过墙壁,无论墙壁的方向如何。它看起来像这样
var updateBall = true;
var collisionPosX, collisionPosY;
function handleMove(e) {
// do collision check
if (collision == 0 && updateBall == true) {
// update ball
}
else if (collision == 0 && /* touch is between collisionPos and current ball position */ ){
updateBall = true;
}
else if (updateBall) {
collisionPosX = checkx;
collisionPosY = checky;
updateBall = false;
}
}
根据您的游戏工作方式和您允许的有效运动(例如,用手指骑墙,然后沿着路径进入白色区域,这是否会将球传送到该位置,因为它是有效的?),了解如何编写“is between collisionPos and current ball position”(在碰撞位置和当前球位置之间)检查会有一些困难。见鬼,这可能是因为做这种检查不起作用,但希望这种设计的结构能帮助你知道什么样的检查会起作用。
再说一次,这只是一个想法,所以请接受它的价值。
我正在尝试制作我的第一个Pacman游戏,但我遇到了一堵我自己似乎无法打破的墙:( 这是关于如何在我的游戏中检测碰撞,所以步行者不能穿过障碍物/墙壁。我已经使它不能去屏幕外与此代码: ,但如果我在屏幕中间的电路板上有一个矩形,我不知道如何编程,这样它就会在墙前停止。 我需要阻止我的pacman移动到竞技场内的墙上,如你所见(左上方的矩形) 我的Board类代码: 希望有人能告诉我该怎么做...似乎
如何让我的球从屏幕上的物体上反弹? 下图是一个很好的例子,说明一旦球碰到障碍物,程序应该如何工作。 我让球从墙上反弹,但剩下的是让它也从物体上反弹。谢谢你的帮助! 以下是源代码:
我正在做一个2d平板游戏。到目前为止,我已经做了一些事情。我正在使用libgdx的矩形进行基本的碰撞检测,所以考虑到我现在只有草块,我用Java制作了一个单块世界(文件读取器还没有准备好),问题是我的检测只在第一次工作,换句话说,如果我产生碰撞到一个块,它会检测到碰撞并这样做。虽然如果我在没有碰撞的情况下,让我的球员在方块顶部出现,球员将永远摔倒。 这是代码=
有人能帮我在我的精灵中添加碰撞点吗?我过去有一个代码,我在图像上分层位图,但是同样的代码不能很好地集成到物理画线上,而不是检测图像上的黑/灰位置。 如果有人能帮助我或为我指出正确的方向,我会很高兴。
在get_hit=pyGame.sprite的第82行,我检查sprite碰撞的移动时,它会给出错误提示:“:File”c:\Users\pc\VS_PYTHON_PY\pyGame.PY“。”。spritecollide(Player,敌方,True)文件“C:\python py\lib\site packages\pygame\sprite.py”,第1682行,位于spritecrolli
问题内容: 我正在尝试制作一个Python游戏,其中红龟追逐蓝龟。当红色乌龟抓到蓝色乌龟时,我希望它在屏幕上说“碰撞”,但它不起作用。当它碰撞时,什么也没有发生,并且给我一个错误“ Turtle”对象不可调用”。 问题答案: 与实际编程相比,这段代码似乎更让人想不到: 乌龟没有方法。您不能使用此语句简单地将方法添加到现有类。没有和功能。每次运动后,如果需要,该碰撞测试将只执行一次。让我们尝试挽救我