日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python跑酷游戏源码_Phaser.js实现简单的跑酷游戏附源码下载

發(fā)布時(shí)間:2023/12/15 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python跑酷游戏源码_Phaser.js实现简单的跑酷游戏附源码下载 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

采用的物理引擎是Phaser.js

在這里對(duì)此引擎不做過(guò)多介紹(因?yàn)槲乙彩切“?#xff0c;嘿嘿)

效果展示:

源碼(詳細(xì)源碼圖片資源可點(diǎn)擊文章下方或屏幕右上方的github鏈接進(jìn)行clone)

1.創(chuàng)建游戲舞臺(tái)

var config = {

type: Phaser.AUTO,

width: 800,

height: 400,

physics: {

default: 'arcade',

arcade: {

gravity: {

y: 300

},

debug: false

}

},

scene: {

preload: preload,

create: create,

update: update

}

};

var game = new Phaser.Game(config); // 創(chuàng)建游戲

2.載入資源

function preload() {

this.load.image('sky', 'assets/sky.png');

this.load.image('ground', 'assets/platform.png');

5 6 this.load.spritesheet('dude', 'assets/dude.png', {

frameWidth: 32,

frameHeight: 48

});

}

3.將資源創(chuàng)建到舞臺(tái)上

var distanceText; // 路程文本

var distance = 0; // 路程

var platforms; // 地面

var player; // 玩家

var enemy; // 敵人

var enemys; // 敵人們

var enemyTimer; // 敵人計(jì)時(shí)器

var distanceTimer; // 路程計(jì)時(shí)器

function create() {

// 添加畫布背景

this.add.image(400, 200, 'sky');

// 添加分?jǐn)?shù)文本

distanceText = this.add.text(16, 16, 'Distance: 0m', {

fontSize: '20px',

fill: '#000'

});

// 添加地面

platforms = this.physics.add.staticGroup();

platforms.create(400, 400, 'ground').setScale(3).refreshBody();

// 添加玩家(精靈)

player = this.physics.add.sprite(100, 300, 'dude');

player.setBounce(0); // 設(shè)置阻力

player.setCollideWorldBounds(true); // 禁止玩家走出世界

// 敵人

enemys = this.physics.add.group();

enemys.children.iterate(function (child) {

child.setCollideWorldBounds(false);

});

// 動(dòng)態(tài)創(chuàng)建敵人

enemyTimer = setInterval(function () {

enemy = enemys.create(1000, 300, 'dude');

enemy.setTint(getColor());

enemy.anims.play('left', true);

enemy.setVelocityX(Phaser.Math.Between(-300, -100));

}, Phaser.Math.Between(4000, 8000))

distanceTimer = setInterval(function () {

distance += 1;

distanceText.setText('Distance: ' + distance + 'm');

}, 1000)

this.physics.add.collider(player, platforms); //玩家在地面上

this.physics.add.collider(enemys, platforms); //敵人在地面上

this.physics.add.collider(player, enemys, hitBomb, null, this);

}

4.在創(chuàng)建場(chǎng)景過(guò)程中寫鍵盤監(jiān)聽事件

var cursors; // 按鍵

// 事件

this.anims.create({

key: 'left',

frames: this.anims.generateFrameNumbers('dude', {

start: 0,

end: 3

}),

frameRate: 10,

repeat: -1

});

this.anims.create({

key: 'right',

frames: this.anims.generateFrameNumbers('dude', {

start: 5,

end: 8

}),

frameRate: 10,

repeat: -1

});

this.anims.create({

key: 'turn',

frames: [{

key: 'dude',

frame: 4

}],

frameRate: 20

});

cursors = this.input.keyboard.createCursorKeys();

5.寫碰撞函數(shù)(當(dāng)玩家與敵人碰撞的結(jié)果)

var gameOver = false; // 游戲結(jié)束

function hitBomb(player, enemys) {

this.physics.pause();

clearInterval(enemyTimer);

clearInterval(distanceTimer);

player.setTint(0xff0000);

gameOver = true;

alert('游戲結(jié)束,您跑了' + distance + 'm');

}

6.在update函數(shù)中寫時(shí)間的執(zhí)行(須注意的是此函數(shù)每一幀都在執(zhí)行,1幀≠1秒)

function update() {

if (cursors.up.isDown && player.body.touching.down) {

player.setVelocityY(-220);

} else {

player.anims.play('right', true);

}

if (gameOver) {

player.setVelocityX(0);

player.anims.play('turn');

return;

}

}

這里我給敵人上了顏色的,隨機(jī)16進(jìn)制顏色

function getColor() {

var color = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"].sort(function(){

return Math.random() - 0.5

}).join("").substr(0,6);

return "0x" + color;

}

整個(gè)源碼奉上(建議去github上自己clone):

var config = {

type: Phaser.AUTO,

width: 800,

height: 400,

physics: {

default: 'arcade',

arcade: {

gravity: {

y: 300

},

debug: false

}

},

scene: {

preload: preload,

create: create,

update: update

}

};

var game = new Phaser.Game(config); // 創(chuàng)建游戲

var distanceText; // 路程文本

var distance = 0; // 路程

var platforms; // 地面

var player; // 玩家

var enemy; // 敵人

var enemys; // 敵人們

var gameOver = false; // 游戲結(jié)束

var enemyTimer; // 敵人計(jì)時(shí)器

var distanceTimer; // 路程計(jì)時(shí)器

var cursors; // 按鍵

// 載入資源

function preload() {

this.load.image('sky', 'assets/sky.png');

this.load.image('ground', 'assets/platform.png');

39 40 this.load.spritesheet('dude', 'assets/dude.png', {

frameWidth: 32,

frameHeight: 48

});

}

// 將資源展示到畫布創(chuàng)建資源

function create() {

// 添加畫布背景

this.add.image(400, 200, 'sky');

// 添加分?jǐn)?shù)文本

distanceText = this.add.text(16, 16, 'Distance: 0m', {

fontSize: '20px',

fill: '#000'

});

// 添加地面

platforms = this.physics.add.staticGroup();

platforms.create(400, 400, 'ground').setScale(3).refreshBody();

// 添加玩家(精靈)

player = this.physics.add.sprite(100, 300, 'dude');

player.setBounce(0); // 設(shè)置阻力

player.setCollideWorldBounds(true); // 禁止玩家走出世界

// 敵人

enemys = this.physics.add.group();

enemys.children.iterate(function (child) {

child.setCollideWorldBounds(false);

});

// 事件

this.anims.create({

key: 'left',

frames: this.anims.generateFrameNumbers('dude', {

start: 0,

end: 3

}),

frameRate: 10,

repeat: -1

});

this.anims.create({

key: 'right',

frames: this.anims.generateFrameNumbers('dude', {

start: 5,

end: 8

}),

frameRate: 10,

repeat: -1

});

this.anims.create({

key: 'turn',

frames: [{

key: 'dude',

frame: 4

}],

frameRate: 20

});

cursors = this.input.keyboard.createCursorKeys();

// 動(dòng)態(tài)創(chuàng)建敵人

enemyTimer = setInterval(function () {

enemy = enemys.create(1000, 300, 'dude');

enemy.setTint(getColor());

enemy.anims.play('left', true);

enemy.setVelocityX(Phaser.Math.Between(-300, -100));

}, Phaser.Math.Between(4000, 8000))

distanceTimer = setInterval(function () {

distance += 1;

distanceText.setText('Distance: ' + distance + 'm');

}, 1000)

this.physics.add.collider(player, platforms); //玩家在地面上

this.physics.add.collider(enemys, platforms);

this.physics.add.collider(player, enemys, hitBomb, null, this);

}

// 一直執(zhí)行

function update() {

if (cursors.up.isDown && player.body.touching.down) {

player.setVelocityY(-220);

} else {

player.anims.play('right', true);

}

if (gameOver) {

player.setVelocityX(0);

player.anims.play('turn');

return;

}

}

function hitBomb(player, enemys) {

this.physics.pause();

clearInterval(enemyTimer);

clearInterval(distanceTimer);

player.setTint(0xff0000);

gameOver = true;

alert('游戲結(jié)束,您跑了' + distance + 'm');

}

function getColor() {

var color = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"].sort(function(){

return Math.random() - 0.5

}).join("").substr(0,6);

return "0x" + color;

}

總結(jié)

以上所述是小編給大家介紹的Phaser.js實(shí)現(xiàn)簡(jiǎn)單的跑酷游戲附源碼下載,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

總結(jié)

以上是生活随笔為你收集整理的python跑酷游戏源码_Phaser.js实现简单的跑酷游戏附源码下载的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。