jQuery的产卵DIV和碰撞检测(jQuery spawning div and collisio

2019-11-03 13:17发布

所以,几乎在我的学校的作业项目IM只是缺少两个主要的事情我似乎无法找出结束IM:

1.How产卵与所述间隙的随机位置上的管障碍,使鸟能飞至(因子评分使用其改变的CSS“右” ATTR管DIV为间隙位置的函数),并且去除所述管道时它熄灭屏幕底部。 (它是一种倒笨鸟先飞游戏一样顺便说一句..)

2.Second我需要与碰撞检测功能的帮助,所以我知道什么时候游戏就结束了(这是不太重要的原因艰难,我认为我可以计算出来后感到不适解决第一个问题)

$(document).ready(function(){
//Variables
var screenWidth = $(window).width();//Screen width
var screenHeight = $(window).height();//Screen height
var birdWidth = $("#bird").width();//bird width
var y = 0;//Background y position
var astY = 0;//Pipe position

var bird = {//bird properties
    goingLeft: false,
    goingRight: false,
    lspeed: 0,
    rspeed: 0,
    maxSpeed: 10
};

setBirdPosition(screenWidth/2 - birdWidth/2, screenHeight/1.3 - birdWidth/2);
startBackgroundMovement();
spawnPipe();


//Start move the screen
function startBackgroundMovement(){
    setInterval(function()
    {
        y+=1;
    $('body').css('background-position-y',y + 'px');
    }, 10);
}


//bird starting position
function setBirdPosition(posX, posY) {
    $("#bird").css("left", posX);
    $("#bird").css("top", posY);
    bird.position = posX;
}
 (function birdLoop() {
    if (bird.goingLeft) {
        bird.lspeed = Math.min(bird.lspeed *1.1 || 1, bird.maxSpeed);
    } else {
        bird.lspeed = Math.max(bird.lspeed - 0.5, 0);
    }
    if (bird.goingRight) {
        bird.rspeed = Math.min(bird.rspeed *1.1 || 1, bird.maxSpeed);
    } else {
        bird.rspeed = Math.max(bird.rspeed - 0.5, 0);
    }
    bird.position = bird.position + (bird.rspeed - bird.lspeed);
    $("#bird").css('left', bird.position);
    requestAnimationFrame(birdLoop);
}());

//Move bird
$(document).keydown(function(e){
    switch(e.which){
        case 37://left
            bird.goingLeft= true; 
             //left edge of screen
      if (bird.position < 0) {
        bird.position = 0;
      }
      break;
        case 39://right
            bird.goingRight= true;
             //right edge of screen
      if (bird.position > screenWidth - birdWidth) {
        bird.position = screenWidth - birdWidth;
      }
        default: return;    
    e.preventDefault();//not sure if needed
    }
}).keyup(function(e){
    switch(e.which){
        case 37://left
            bird.goingLeft= false;
            //left edge of screen
       if (bird.position < 0) {
        bird.position = 0;
      }
            break;
        case 39://right
            bird.goingRight= false;
            //right edge of screen
      if (bird.position > screenWidth - birdWidth) {
        bird.position = screenWidth - birdWidth;
      }
        default: return;    
    e.preventDefault();//not sure if needed
    }
});

function spawnPipe()//spawn pipes
{
    setInterval(function()
    {
        astY += 1;
        $("#fullPipe").css("top", astY);              
    }, 10);
}
});

检查: http://jsfiddle.net/u38ratk9/6/

Answer 1:

如何产卵管障碍

管发生在有规律的间隔或距离。 您可以检查所经过的时间,或者你可以检查由现有的管道经过的距离。

其次我需要碰撞检测的帮助

管具有宽度和高度,以及位置。 从本质上讲,你的水管也是盒子。 这也意味着该鸟一样。 我相信,它被称为“边界框”。 您可以检查是否有鸟的边缘,如果它与框的边缘相交。



Answer 2:

首先,我已经改变了你的CSS点点地安排代码和管道设置不同宽度群体类(“.zero”,“一”等),你可以添加更多的宽度团体或更高版本编辑但注意到边宽度管道和鸟宽度之间的比率。

#bird
{
    position:absolute;
    width:4%;
    height: auto;
    right:0;
}

#fullPipe
{
    position:absolute;
    width:100%;
    left:0%;
    height: 10%;
}

#leftPipe, #rightPipe
{
    position:absolute;
    top:0;
    width:48%;
    height: 100%;
}

#leftPipe
{
    left:0%;
}

#rightPipe
{
    right:0%;
}

.zero #leftPipe, .zero #rightPipe
{
    width:48%;
}

.one #leftPipe
{
    width:8%;
}

.one #rightPipe
{
    width:88%;
}

.two #leftPipe
{
    width:28%;
}

.two #rightPipe
{
    width:68%;
}

.three #leftPipe
{
    width:58%;
}

.three #rightPipe
{
    width:38%;
}

.four #leftPipe
{
    width:88%;
}

.four #rightPipe
{
    width:8%;
}

#leftPipe img, #rightPipe img
{
    width:100%;
    height: 100%;
}

在JS,注意到的setInterval()中的条件,我现在将其设置为以“700”为示范,但是之后您将设置碰撞准备好了,你可以用的条件取代它,如果管道和身体不要碰撞(从框架)然后重置管,并设置新的宽度组类。

    var PipesRandom;
    var PipesWidth = ['zero', 'one', 'two', 'three', 'four'];  
    function spawnPipe(astY){ //spawn asteroids
        $('#fullPipe').css("top", astY);  
    }  
    setInterval(function(){
        astY += 1;
        if(astY < 700){
            spawnPipe(astY);
        } 
        else {
            astY = -100;
            PipesRandom = PipesWidth[Math.floor(Math.random() * PipesWidth.length)];
            $('#fullPipe').removeClass('zero one two three four');
            $('#fullPipe').addClass(PipesRandom);
            spawnPipe(astY);
        }
    } ,10);

例如: http://jsfiddle.net/u38ratk9/8/

关于碰撞,有很多的选择,你可以检查,例如这个问题: 请推荐一个jQuery插件,处理碰撞检测的可拖动的元素

或: 基本的2D碰撞检测

也有很多,只是搜索。



文章来源: jQuery spawning div and collision detection