javascript中createjs小游戲開(kāi)發(fā)的示例分析

這篇文章主要介紹javascript中createjs小游戲開(kāi)發(fā)的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

十年的鐵山網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都營(yíng)銷(xiāo)網(wǎng)站建設(shè)的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整鐵山建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“鐵山網(wǎng)站設(shè)計(jì)”,“鐵山網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

1. 實(shí)現(xiàn)一個(gè)無(wú)縫連接的背景圖,模擬出汽車(chē)在加速的狀態(tài)

this.backdrop = new createjs.Bitmap(bg);this.backdrop.x = 0;this.backdrop.y = 0;this.stage.addChild(that.backdrop);this.w = bg.width;this.h = bg.height;//創(chuàng)建一個(gè)背景副本,無(wú)縫連接var copyy = -bg.height;this.copy = new createjs.Bitmap(bg);this.copy.x = 0;this.copy.y = copyy;  //在畫(huà)布上y軸的坐標(biāo)為負(fù)的背景圖長(zhǎng)//使用createjs的tick函數(shù),逐幀刷新舞臺(tái)createjs.Ticker.addEventListener("tick", tick);function tick(e) {   if (e.paused !== 1) {//舞臺(tái)逐幀邏輯處理函數(shù)that.backdrop.y = that.speed + that.backdrop.y;
        that.copy.y = that.speed + that.copy.y;if (that.copy.y > -40) {
              that.backdrop.y = that.copy.y + copyy;
        }if (that.copy.y > -copyy - 100) {
              that.copy.y = copyy + that.backdrop.y;
        }
        that.stage.update(e);
    }          
}

2. 隨機(jī)繪制障礙物

由于一條跑道肯定會(huì)有很多障礙物,對(duì)于超出屏幕的障礙物我們要進(jìn)行‘資源回收’,否則游戲到后面會(huì)越來(lái)越卡頓。

// 刪除越界的元素for (var i = 0, flag = true, len = that.props.length; i < len; flag ? i++ : i) {if (that.props[i]) {if (that.props[i].y > height + 300) {
            that.stage.removeChild(that.props[i]);
            that.props.splice(i, 1);
            flag = false;
        } else {
            flag = true;
        }
    }
}

一共有3條賽道,我們不能出現(xiàn)3個(gè)道具同時(shí)出現(xiàn)在水平線上,因此我們會(huì)隨機(jī)取1~2個(gè)值繪制障礙物。所有游戲我們都應(yīng)該有參數(shù)去控制它的難易程度,免得臨上線的時(shí)候,老板體驗(yàn)之后覺(jué)得游戲太難了……那就非常地尷尬了。 因此,我們會(huì)設(shè)置加速物體,減速物體,炸彈出現(xiàn)的比例,后期可以調(diào)整這個(gè)比例來(lái)設(shè)置游戲的難易程度。

var num = parseInt(2 * Math.random()) + 1, i;for (i = 0; i < num; i++) {var type = parseInt(10 * Math.random()) + 1;// 設(shè)置道具出現(xiàn)比例if (type == 1) {/繪制炸彈
        } else if ((type >= 2) && (type <= 5)) {//繪制加速道具} else if ((type >= 6) && (type <= 10)) {//繪制減速道具        }
    }

第一次繪制完障礙物之后,會(huì)隨機(jī)時(shí)間繪制下一次的障礙物。

var time = (parseInt(3 * Math.random()) + 1);  //隨機(jī)取1~3整數(shù)// 隨機(jī)時(shí)間繪制障礙物setTimeout(function () {
    that.propsTmp = [];  //清空    that.drawObstacle(obj);
}, time * 400);  //400ms ~ 1200ms

3.碰撞檢測(cè)

我們用一個(gè)數(shù)組來(lái)存放汽車(chē)占的矩形區(qū)域,障礙物占的矩形區(qū)域,在每一次tick的時(shí)候循環(huán)遍歷數(shù)組,看是否有重疊的,若有重疊,則發(fā)生了碰撞。

createjs的一些小知識(shí):

1. 暫停和恢復(fù)舞臺(tái)渲染

createjs.Ticker.addEventListener(“tick”, tick); 
function tick(e) { if (e.paused === 1) { //處理     }
}     
createjs.Ticker.paused = 1; //在函數(shù)任何地方調(diào)用這個(gè),則會(huì)暫停tick里面的處理 createjs.Ticker.paused = 0; //恢復(fù)游戲

2. 由于汽車(chē)會(huì)有加速,減速,彈氣泡的效果。因此我們把這幾個(gè)效果繪制在同一個(gè)container中,方便統(tǒng)一管理,對(duì)這些效果設(shè)置name屬性,之后可以直接使用getChildByName獲取到該對(duì)象。

container.name = ‘role’; //設(shè)置name值car = this.stage.getChildByName(“role”);  //使用name值方便獲取到該對(duì)象

3. 預(yù)加載 preload (createjs 的 preload 非常的實(shí)用)

一開(kāi)始是自己寫(xiě)的預(yù)加載,后來(lái)發(fā)現(xiàn)createjs里面對(duì)圖片是有跨域處理的,自己處理跨域的img就比較麻煩,所以直接使用createjs的預(yù)加載。

//放置靜態(tài)資源的數(shù)組
var manifest = [
    {src: __uri('./images/car_prop2_tyre@2x.png'), id: 'tyre'}
];
var queue = new createjs.LoadQueue();
queue.on('complete', handleComplete, this);
queue.loadManifest(manifest);
//資源加載成功后,進(jìn)行處理
function handleComplete() {
   var tyre = queue.getResult('tyre');  //拿到加載成功后的img
}

一般做一個(gè)游戲,我們正常都會(huì)構(gòu)建一個(gè)游戲類(lèi)來(lái)承載。 下面是一個(gè)游戲正常有的接口:

;(function () {function CarGame(){}
    CarGame.prototype = {
        init:function(manifest) {this.preLoad(manifest);  //資源預(yù)加載//時(shí)間倒計(jì)時(shí)this.prepare(3, 3);  //倒計(jì)時(shí)3秒this.bindEvent(); 
        },
        render:function() {           this.drawBg(bg1);           this.drawRole(car, effbomb, effquick);           this.drawObstacle(obj);
        },//在游戲結(jié)束的時(shí)候批量銷(xiāo)毀destroy:function(){//移除tick事件createjs.Ticker.removeEventListener("tick", this.tick);//暫停里程,倒計(jì)時(shí)clearInterval(this.changem);
            clearTimeout(this.gametime);
        },//由于期間用戶可能切出程序進(jìn)行其他操作,因此都需要一個(gè)暫停的接口pause:function() {//暫停里程,倒計(jì)時(shí)clearInterval(this.changem);
            clearTimeout(this.gametime);//暫停頁(yè)面滾動(dòng)createjs.Ticker.paused = 1;
        },//重新開(kāi)始游戲reStart:function(){           this.destroy();           this.init(manifest);
        },
        gameOver:function(){           //顯示爆炸效果   var car = this.stage.getChildByName("role");
           car.getChildByName('bomb').visible = true;
           car.getChildByName('quick').visible = false;           this.destroy();
        }
    }
})()

以上是“javascript中createjs小游戲開(kāi)發(fā)的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

網(wǎng)站題目:javascript中createjs小游戲開(kāi)發(fā)的示例分析
網(wǎng)址分享:http://bm7419.com/article20/ijpejo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、虛擬主機(jī)網(wǎng)站排名、外貿(mào)建站、域名注冊(cè)服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)