当前位置: 首页 > 知识库问答 >
问题:

HTML5 画布游戏冲突检测问题

施永宁
2023-03-14

我正在制作一个HTML5 Runner Game,对象连续运行,鼠标“点击”时,他会跳。然后我在游戏中添加一个障碍并检测碰撞,但它不能正常工作。问题是,当障碍物与跑步物体碰撞一次并检测到碰撞时,清除所有物体,然后在画布上重新绘制障碍物,但当障碍物一次又一次碰撞时,物体的速度变得越来越快……:(问题是如何克服它?代码如下:

function clearHurdle(){

    h.clearRect(100,hy,160,250);
    //if(hx==paiX||hy==paiY){
    bl= new Image();
    bl.onload= function(){
        h.drawImage(bl,100,hy-20,160,250);
    };
    bl.src= "blast.png";
    setTimeout(function(){
    h.clearRect(100,hy-20,160,250);
    show_char=0;
    clearAll();
    //drawpai();
    hurdle();   
    },100);

}

function hurdle(){

    if(hx>(paiX-2) && hx<(paiX+2) && hy>(paiY-2) && hy<(paiY+2)){
        console.log(hx +'===='+(paiX-2));
        clearHurdle();
        hx=1360;    
    }

    h.clearRect(hx,hy,170,250);

    var img = new Image();

    img.onload= function(){
        h.drawImage(img,hx,hy,170,250);
    }

    img.src="hurdle.png";
    hx-= 4.5;

    if(hx>-400){
        setTimeout(hurdle,1000/60);
    }

    show_char=1;
}

共有1个答案

欧阳永宁
2023-03-14

据我所知,随着游戏的进行,速度增加的问题是由于在clearHurdle函数中创建了重复的设置超时。按照您的方式,它在第一次运行中起作用,但由于setTimeout调用函数barrier(然后在一个无休止的循环中调用clearHurdleback),它添加了第二、第三、第四个setTimeout等要运行的函数。

如果这确实是您的问题,您可以通过在清除Hurdle函数中声明设置超时的变量名称来解决它,使用格式varName = setTimeout(function(){...代码在这里... });并使用清除超时(“varName”)每次重置设置超时(除非您只是重新构建程序以不需要函数相互调用)

 类似资料:
  • 我在做一个小的迷你瓷砖引擎游戏。我目前正致力于实现简单的基于块的碰撞检测,然而我遇到了实际的问题。我已经在谷歌上搜索了几个小时,查看了不同的实现,但似乎无法理解它。我目前的努力(只在玩家向右移动时检测碰撞),大部分工作,但允许玩家通过障碍物的底部。碰撞使用法线映射数组来检测碰撞,映射中的任何值2都是一个实体对象。 我明白了我需要做什么的概念--在我移动我的玩家之前,计算玩家将最终进入哪个单元格。检

  • 问题内容: 如何检测两个元素是否发生冲突? 这两个div是简单的彩色框,彼此垂直,因此没有复杂的形状或角度。 问题答案: 一般思路-获得框的偏移量和尺寸,并检查它们是否重叠。 如果要更新,可以使用: 另外,请注意,您可以针对特定示例优化功能。 因为它们是固定的,所以您不必重复读取框的尺寸(就像我在代码中一样)。您可以在页面加载时读取它们(将其读取到变量中),然后仅读取变量 小盒子的水平位置不会改变

  • 我正在尝试为我的大学工作制作一个基于2D平台的游戏(在SFML)。我不是要求任何人为我编写一些代码,但如果有人能提供一些指示,我将非常感激:) 目前我有大约13门课,包括: BaseEntity(大多数游戏对象都是由此派生的) 玩家(继承自BE) 魔法宝石(玩家需要这些来通过关卡晋级) 平台 SolidBlock(从平台继承) 可以说,我已经构建了大部分的游戏“积木”--每个类都有自己的更新函数,

  • 我在ViewDid中有一个动画,如下所示 它只是从屏幕顶部创建小正方形,然后移动到底部。我还有一个UIImageView,它由x轴上的加速计控制。目标不是接触动画对象。就像一个简单的比赛游戏。然而,我无法找到如何检测imageView和动画之间的冲突?

  • 下面的代码只是从屏幕顶部创建小正方形,然后移动到底部。我还有一个UIImageView(播放器),它由x轴上的加速计控制。目标不是接触动画对象。就像一个简单的比赛游戏。虽然我没有错误,但我无法检测到碰撞。我在代码中找不到错误。有什么问题吗?

  • 本文向大家介绍html5-canvas 检测鼠标在画布上的位置,包括了html5-canvas 检测鼠标在画布上的位置的使用技巧和注意事项,需要的朋友参考一下 示例 本示例将说明如何获取鼠标相对于画布的位置,例如(0,0)HTML5 Canvas的左上角。的e.clientX和e.clientY将获得相对于文档的顶部位置的鼠标,来改变这种是基于画布的顶部,我们减去left,并right从客户端X和