继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

基于jQuery制作自己的web游戏引擎-贰

小昊子
关注TA
已关注
手记 12
粉丝 54
获赞 183

基于jQuery制作自己的web游戏引擎-贰
本章节衔接基于jQuery制作自己的web游戏引擎

第二部分:编写物理引擎
作为一个游戏引擎,物理部分是必不可少的,所以,我们即将开始编写physics.js

首先要开始编写碰撞检测,定义一个函数:

function collision(obj1,obj2) {
    if (
        ((obj1.x + obj1.width) >= obj2.x) &&
        (obj1.x <= (obj2.x + obj2.width)) &&
        ((obj1.y + obj1.height) >= obj2.y) &&
        (obj1.y <= (obj2.y + obj2.height))
    )
    {
        return true;
    } else {
        return false;
    }
}

那么如果想要知道一个game object是否有撞上任意其他游戏对象呢?

function collisionObj(obj1) {
    var collObj = [];
    for (var i = 0 ; i < gameObjs.length ; i++){
        if (gameObjs[i] !== obj1){
            if (collision(obj1,gameObjs[i])){
                collObj.push(gameObjs[i].name);
            }
        }
    }
    return collObj;
}

在现实生活中,两个物体相撞后,会因反作用力向相反方向运动,所以可以写一个rebound()函数进行该操作

function rebound(obj1,obj2) {
    obj1.define("force",true);
    obj2.define("force",true);
    if (collision(obj1,obj2)){
        obj1.angle = 180 - obj1.angle;
        obj2.angle = 180 - obj2.angle;

        var tmp = obj1.speed;
        obj1.speed += obj2.speed;
        obj2.speed += tmp;
    }
}

与reboundUpdate()

function reboundUpdate(obj1) {
    if (!obj1.get("force")){
        return null;
    }
    var rebObj = [];
    for (var i = 0 ; i < gameObjs.length ; i++){
        if (gameObjs[i] !== obj1){
            rebound(obj1,gameObjs[i])
        }
    }
    return rebObj;
}

现在物理引擎搭建完毕,接下来就可以编写游戏啦~
physics部分[完]

打开App,阅读手记
2人推荐
发表评论
随时随地看视频慕课网APP