Phaser3 场景Scene之间的传值 -- HTML网页游戏开发

2018-11-08 admin

PHASERJS3

一、首先当然得有至少有二个场景sceneA.js,sceneB.js

二、从场景A传值到场景B二种方法

1)通过事件this.events.emit(‘event key’,{objKey:objValue});

从sceneA通过 ths.events.emit时传值到sceneB时有个需要特别注的事项就是,得把sceneB的 active设为 ture,否则因为 sceneB还未激活,是监听不到 events.on事件的!!!

2)通过场景启动this.scene.start(‘gameB key’,{objKey:objValue});

具体详见代码:

HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <script src="libs/phaser/phaser.min.js"></script>
    <script src="scripts/scenes/gameconfig.js"></script>
    <script src="scripts/scenes/sceneA.js"></script>
    <script src="scripts/scenes/sceneB.js"></script>

    <title>iFIERO Games Tutorial</title>
    <style>
        body {
            margin: 0;
        }
        canvas {
            display: block;
            margin: 0;
            position: relative;
            top: 0%;
            left: 0%;
        }
    </style>
</head>

<body>
    <div id="game"></div>
    &copy;Copyrigths By www.iFIERO.com
</body>
<script src="libs/jquery/jquery.min.js"></script>
</html>

sceneA.js

'use strict';
var SceneA = new Phaser.Class({
    Extends: Phaser.Scene,
    // 在整个工程中只会执行一次
    initialize: function BootScene() {

        Phaser.Scene.call(this, {
            key: 'sceneA',
            active: false // listening resize event;
        });

    },
    // 每次调用场景SceneA会执行一次;
    init: function () {

    },
    preload:function(){

    },
    create:function(){
        // 1\. 从SCENEA emit gameCountDown事件,传送 {countDown:10} 对象到场景B sceneB
        this.events.emit('gameCountDown',{countDown:10}); //* 事件KEY=>gameCountDown

        // 2.start方法传送
        this.scene.start('sceneB',{countDown:10}) //* 场景KEY=> sceneB
    },
});

sceneB.js


'use strict';
var SceneB = new Phaser.Class({
    Extends: Phaser.Scene,

    initialize: function BootScene() {

        Phaser.Scene.call(this, {
            key: 'sceneB',
            active: true // listening resize event;
        });

    },
    init: function (data) {
        //方法1\. 引入sceneA 在初始化的时候就可以获得场景Scene传递的值;
        this.sceneA = this.scene.get('sceneA'); // sceneA's key

        console.log("get data from sceneA:",data.countDown);
    },
    preload:function(){

    },
    create:function(){
       // 方法2.监听scene的事件 gameCountDown
        this.sceneA.events.on('gameCountDown',function(data){
            console.log(data.countDown); 
        });
    },
});

gameconfig.js

var game;
//* setDepth for every object;
var gameConfig = {
    depth:{
        player:1,
    }
}
// once the window loads...
window.onload = function () {
    // 接收 websocket;
    // config of the game;
    var config = {
        type: Phaser.AUTO,
        parent: 'game',
        width: 640, // don't window.innerWidth 
        height: 512,
        physics: {
            default: 'arcade',
            arcade: {
                gravity: {
                    y: 0
                },
                debug: false,
            }
        },
        //*** scenes used by the game
        // scene:  [BootScene,PlayGameScene,UIScene]
    }
    game = new Phaser.Game(config);
    game.scene.add('sceneA', SceneA); //*** key,class */
    game.scene.add('sceneB', SceneB);

    window.focus();
    resize();
    window.addEventListener('resize', resize, false);
}

function resize() {

    var canvas = document.querySelector('canvas');
    var windowWidth = window.innerWidth;
    var windowHeight = window.innerHeight;
    var windowRatio = windowWidth / windowHeight;
    var gameRatio =  game.config.width / game.config.height;
    if (windowRatio < gameRatio) {
        canvas.style.width = windowWidth + 'px';
        canvas.style.height = (windowWidth / gameRatio) + 'px';
    } else {
        canvas.style.width = (windowHeight * gameRatio) + 'px';
        canvas.style.height = windowHeight + 'px';
    }

}

结语: 用Phaserjs3 JavaScript框架 来开发HTML网页游戏,虽不复杂,但有道是『纸上得来终觉浅,绝知此事要躬行』,代码还是得亲自多码才行噢!

更多游戏教学:http://www.iFIERO.com – 为游戏开发深感自豪

原文链接:https://segmentfault.com/a/1190000016953679

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处。

转载请注明:文章转载自 JavaScript中文网 [https://www.javascriptcn.com]

本文地址:https://www.javascriptcn.com/read-44901.html

文章标题:Phaser3 场景Scene之间的传值 -- HTML网页游戏开发

相关文章
js性能优化 如何更快速加载你的JavaScript页面
确保代码尽量简洁 不要什么都依赖JavaScript。不要编写重复性的脚本。要把JavaScript当作糖果工具,只是起到美化作用。别给你的网站添加大量的JavaScript代码。只有必要的时候用一下。只有确实能改善用户体验的时候用一下。 ...
2015-11-12
10个强大的纯CSS3动画案例分享
我们的网页外观主要由CSS控制,编写CSS代码可以任意改变我们的网页布局以及网页内容的样式。CSS3的出现,更是可以让网页增添了不少动画元素,让我们的网页变得更加生动有趣,并且更易于交互。本文分享了10个非常炫酷的CSS3动画案例,希望大家...
2015-11-16
Android中Okhttp3实现上传多张图片同时传递参数
之前上传图片都是直接将图片转化为io流传给服务器,没有用框架传图片。 最近做项目,打算换个方法上传图片。 Android发展到现在,Okhttp显得越来越重要,所以,这次我选择用Okhttp上传图片。 Okhttp目前已经更新到Okhttp...
2017-03-17
国内外html5游戏引擎排行
一个好的HTML5游戏引擎,能够大大简化游戏的开发实现。 排名列表: Construct 2 ImpactJS EaselJS pixi.js Phaser GameMaker Three.js PlayCanvas Turbulenz ...
2015-11-12
详解HTML5游戏玩家流失原因
对任何类型的电子游戏来说,玩家流失都是一个无法回避的问题。玩家为什么离开游戏?近日,HTML5游戏设定师纳森·洛维托(Nathan Lovato)在游戏开发者网站Gamasutra撰写文章,解读了玩家离开游戏的16个理由。 HTML5游戏 ...
2015-11-12
YouTube正式默认使用HTML5视频播放器
YouTube视频网站现在默认使用HTML5播放器,这意味着更好的性能、 稳定性、 电池寿命和甚至是更好的安全性。现在用户通过Chrome、IE 11、Safari 8和Beta版本的Firefox进行浏览的时候都默认使用HTML5视频播放...
2015-11-12
从2014年的发展来展望JS的未来将会如何
&lt;font face=&quot;寰�杞�闆呴粦, Arial, sans-serif &quot;&gt;2014骞达紝杞�浠惰�屼笟鍙戝睍杩呴€燂紝鍚勭�嶈��瑷€灞傚嚭涓嶇┓锛屼互婊¤冻鐢ㄦ埛涓嶆柇鍙樺寲鐨勯渶姹傘€傝繖浜涜��...
2015-11-12
12个你未必知道的CSS小知识
虽然CSS并不是一种很复杂的技术,但就算你是一个使用CSS多年的高手,仍然会有很多CSS用法/属性/属性值你从来没使用过,甚至从来没听说过。 1.CSS的color属性并非只能用于文本显示 对于CSS的color属性,相信所有Web开发人员...
2015-11-12
ajax为什么令人惊异?ajax的优缺点
使用Ajax的最大优点,就是能在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变的信息。 Ajax不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。就像DHT...
2015-11-12
HTML5的5个不错的开发工具推荐
HTML5规范终于在今年正式定稿,对于从事多年HTML5开发的人员来说绝对是一个重大新闻。数字天堂董事长,DCloud CEO王安也发表了文章,从开发者和用户两个角度分析了HTML对两个人群的优势。其实,关于HTML5的开发工具,我们以往的...
2015-11-12
回到顶部