查看: 2823|回复: 0

[JavaScript/JQuery] 基于jQuery制作自己的web游戏引擎-贰

发表于 2018-3-18 09:18:53

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

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

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

  1. function collision(obj1,obj2) {
  2. if (
  3. ((obj1.x + obj1.width) >= obj2.x) &&
  4. (obj1.x <= (obj2.x + obj2.width)) &&
  5. ((obj1.y + obj1.height) >= obj2.y) &&
  6. (obj1.y <= (obj2.y + obj2.height))
  7. )
  8. {
  9. return true;
  10. } else {
  11. return false;
  12. }
  13. }
复制代码

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

  1. function collisionObj(obj1) {
  2. var collObj = [];
  3. for (var i = 0 ; i < gameObjs.length ; i++){
  4. if (gameObjs[i] !== obj1){
  5. if (collision(obj1,gameObjs[i])){
  6. collObj.push(gameObjs[i].name);
  7. }
  8. }
  9. }
  10. return collObj;
  11. }
复制代码

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

  1. function rebound(obj1,obj2) {
  2. obj1.define("force",true);
  3. obj2.define("force",true);
  4. if (collision(obj1,obj2)){
  5. obj1.angle = 180 - obj1.angle;
  6. obj2.angle = 180 - obj2.angle;
  7. var tmp = obj1.speed;
  8. obj1.speed += obj2.speed;
  9. obj2.speed += tmp;
  10. }
  11. }
复制代码

与reboundUpdate()

  1. function reboundUpdate(obj1) {
  2. if (!obj1.get("force")){
  3. return null;
  4. }
  5. var rebObj = [];
  6. for (var i = 0 ; i < gameObjs.length ; i++){
  7. if (gameObjs[i] !== obj1){
  8. rebound(obj1,gameObjs[i])
  9. }
  10. }
  11. return rebObj;
  12. }
复制代码

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



回复

使用道具 举报