这两天由于项目的需要,所以简单学了一下phaser框架。

官网:http://phaser.io/

还有一个phaser小站,是中文的网站,但是内容不如英文文档全,大家也可以去看这个网站,需要查阅API时,再去英文网站也可以 :https://www.phaser-china.com

分享一下入门教程:http://club.phaser-china.com/topic/59899a81484a53dd723f422b

demo地址:https://github.com/dreamITGirl/phaser  (持续更新中...)

先简单介绍一下pahser。

  一、什么是phaser?

    Phaser是一款专门用于桌面及移动HTML5 2D游戏开发的开源免费框架,提供JavaScript和TypeScript双重支持,内置游戏对象的物理属性,采用Pixi.js引擎以加快Canvas和WebGL渲染,基于浏览器支持可自由切换。

  二、phaser的特点:

    快速、免费、易于维护,使用Phaser来开发2D小游戏的优势显而易见。一方面,开发者可以直接通过Koding平台上的VM开发系统进行代码编写及预览。另一方面,也可以在支持Canvas的浏览器中直接安装Phaser来进行游戏开发。

    多种支持:JavaScript、TypeScript双重支持、内置游戏对象的物理属性、WebGL、Canvas渲染自由切换、完全支持Web音频、输入:多点触控、键盘、鼠标、MSPointer事件。

    兼容性强:除了IE 9+、Firefox、Chrome、Safari及Opera等桌面浏览器之外,Phaser还支持Mobile Chrome(Android 2.2+)及Mobile Safari(iOS 5+)等移动浏览器。使用Phaser进行游戏开发没有任何语言设定。
  

    三、创建游戏和新增场景

             1、使用方法

    

    

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"> <link rel="stylesheet" href="css/reset.css" />
<title></title>
<style>
body{
width:100%;
height:100%;
overflow: hidden;
}
</style>
</head>
<body>
<script type="text/javascript" src="js/jquery-3.3.1.min.js" ></script>
<script type="text/javascript" src="js/phaser.min.js" ></script>
<!--加载游戏图片资源和精灵图-->
<script type="text/javascript" src="js/demo01.js" ></script>
</body>
</html>

  2、创建游戏对象

  

  这个里面有一个问题,如果我页面中没有加1.png中的红框部分的代码,页面会有一个偏移量(当然,偏移量仅在移动端出现)问题页面如下图显示

 

  在屏幕的右侧和底部都会有一个黑色的部分,但是canvas的区域也包含这一部分,所以,我们需要根据不同的手机,算一下偏移量,在封装添加图片或者精灵图的时候,计算尺寸中加上偏移量。

  这一部分我会在后面的博客中写。本篇不做介绍。

var game = new Phaser.Game({
width:800,//用户自己设置的屏幕宽度,这里以800*600为例
height:600,
canvas:$('canvas')[0],//由于我在html中添加了<canvas></canvas>标签,而我使用的是webGL的方式。这一行可以不设置
})

 这样基础的game对象我们就创建好了,接下来就是创建场景,我以项目为例,大家可以参考上一个图,可以从图上分析一下,从图上来看我至少需要创建7个场景,分别是Load场景,menu场景,还有图上的5个场景。而在Menu场景中,进入到下面的5个场景的按钮都是可点击的。所以,我们采用了game.States的状态管理

game.States = {}

game.States.Load = function (){

}

game.States.Menu = function (){

}

game.States.Billboard = function (){

}

game.States.Rule = function (){

}

game.state.add('Load',game.States.Load)
game.state.add('Menu',game.States.Menu)
game.state.add('Billboard',game.States.Billboard)
game.state.add('Rule',game.States.Rule) game.state.start('Load')

由于在同一时间,同一页面只能执行一个场景,所以我们在用户一开始进入页面时首先执行Load场景 

  四、游戏资源的加载添加

  这里以加载精灵图和图片为例,加载音频,还有其他的媒体文件大家可以去看文档

//加载图片
this.load.image(key,url);//key代表你为这个图片起的名字,url代表图片的路径
//添加图片
game.add.image(x,y,key);//x表示在该图片在水平方向的偏移量,y表示该图片在垂直方向的偏移量 //加载精灵图
this.load.spritesheet(key,url,size,num)//size代表一大张精灵图中我们用到的这个精灵图的大小,num代表这个大的精灵图中包含几个我们的小的精灵图,num可不写,若不写,插件会自己算 //添加精灵图
game.add.sprite(x,y,key)//这个上面本身是没有事件的,如果使用这种方式添加,后面还是要额外添加该精灵图的点击事件。 //由于需求需要,我把Menu中的添加精灵图的方式换成了添加button的方式
game.add.button(x,y,key,callback,callbackContext,overFrame, outFrame, downFrame, upFrame, group)//callbackContext表示callback执行的上下文,默认是game。
//overFrame, outFrame, downFrame, upFrame,指的是按钮的4种状态,group该精灵图属于哪个组

实例代码:

//封装的全局方法,添加图片
function addImage(x,y,key,w,h){
var IMAGE = game.add.image(x*bl,y*bl,key)
IMAGE.width = w*bl;
IMAGE.height = h*bl;
return IMAGE
}
//封装的全局方法,添加精灵图
function addSprite(x,y,key,w,h,callback){ var SPRITE = game.add.button(x*bl,y*bl,key,callback,game,1,0,2) SPRITE.width = w*bl SPRITE.height = h*bl return SPRITE }

使用实例

game.States.Load = function (){
    this.init = function(){
      this.stage.disableVisibilityChange = true; //当页面失去焦点时动画,倒计时仍继续执行
    }
    this.preload = function(){
      this.load.image('bg','./images/bg.png')
      this.load.image('menu-score','./images/menu-score.png')

      this.load.spritesheet('menu-logo','./images/menu-logo.png',560,248,4)
      this.load.spritesheet('menu-one','./images/menu-one.png',560,150,3)
      this.load.spritesheet('menu-pk','./images/menu-pk.png',560,150,3)
      this.load.spritesheet('menu-rank','./images/menu-rank.png',560,150,3)
      this.load.spritesheet('menu-list','./images/menu-list.png',260,150,3)
      this.load.spritesheet('menu-rule','./images/menu-rule.png',260,150,3)
    }
    this.create = function(){
      this.add.image(0,0,'bg')
      addImage(40,40,'menu-logo',560,248).animations.add('shark').play(10,true)

      addImage(40,318,'menu-score',560,65)

      addSprite(40,407,'menu-rank',560,150,function(){
        console.log(1)
      })
    }
 }

 

phaser小游戏框架学习(一)的更多相关文章

  1. phaser小游戏框架学习(二)

    今天继续学习phaser.js.上周写的学习教程主要内容是创建游戏场景,游戏中的显示对象,按钮对象的使用以及如何在不同屏幕大小中完美适配.这篇博客以介绍游戏榜单的渲染更新为主. 代码地址:https: ...

  2. phaser小游戏框架学习中的屏幕适配

    这篇博客主要讲一下上一篇博客的右侧和底部出现的问题.就是页面会有偏移量.说一下这个产生的原因吧. 一开始在构建html页面的时候,习惯性的在页面中加了 <meta name="view ...

  3. Phaser小游戏

    本来今天打算阅读AngularJs源代码的,但是上头下来了任务,做个小霸王上面的那种接金蛋的游戏,想象最近系统的学习了一下gulp和之前熟悉了一遍的Phaser,于是就打算用这两个东西一起来做个dem ...

  4. Python---战机小游戏,学习pygame

    import pygame # 导入游戏包 pygame.init() # 导入并初始化所有pygame模块,使用其他模块之前必须先调用init()方法 print('下面是游戏代码:') # 绘制矩 ...

  5. 例子:js超级玛丽小游戏

    韩顺平_轻松搞定网页设计(html+css+javascript)_第34讲_js超级玛丽小游戏_学习笔记_源代码图解_PPT文档整理 采用面向对象思想设计超级马里奥游戏人物(示意图) 怎么用通过按键 ...

  6. 小游戏专场:腾讯云Game-Tech技术沙龙上海站顺利落下帷幕

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯游戏云发表于云+社区专栏 9月14日腾讯云GAME-TECH技术沙龙小游戏专场在上海顺利举办,此次技术沙龙由腾讯云的资深专家,以及 ...

  7. Phaser开源2d引擎 javascript/html5游戏框架

    功能特点(Features) 易维护代码(Easy Asset Loading) Phaser可以加载图片,音频文件,数据文件,文本文件和自动解析精灵图和纹理地图集数据(出口纹理封隔器或Flash C ...

  8. JS写小游戏(一):游戏框架

    前言 前一阵发现一个不错的网站,都是一些用html5+css+js写的小游戏,于是打算学习一番,写下这个系列博客主要是为了加深理解,当然也有一些个人感悟,如果英文好可以直接Click Here. 概述 ...

  9. Phaser开源2d引擎 html5游戏框架中文简介

    功能特点(Features) 易维护代码(Easy Asset Loading) Phaser可以加载图片,音频文件,数据文件,文本文件和自动解析精灵图和纹理地图集数据(出口纹理封隔器或Flash C ...

随机推荐

  1. 2016第十三届浙江省赛 D - The Lucky Week

    D - The Lucky Week Edward, the headmaster of the Marjar University, is very busy every day and alway ...

  2. Hybrid App混合模式移动应用开发(AngularJS+Cordova+Ionic)

    以前公司开发了某手机APP是通过jquerymobile来实现的,发现它对手机上的原生设备无能为力.于是在下一个项目到来之际,通过筛选最终决定使用cordova+Ionic.看起来简单,但是因为他们各 ...

  3. Oracle 下ASM磁盘总结

    Oracle 下ASM磁盘总结 文章转载: Oracle下创建ASM磁盘总结https://blog.csdn.net/okhymok/article/details/78791841?utm_sou ...

  4. webapi中使用token验证(JWT验证)

    本文介绍如何在webapi中使用JWT验证 准备 安装JWT安装包 System.IdentityModel.Tokens.Jwt 你的前端api登录请求的方法,参考 axios.get(" ...

  5. 第三章 Java内存模型(上)

    本章大致分为4部分: Java内存模型的基础:主要介绍内存模型相关的基本概念 Java内存模型中的顺序一致性:主要介绍重排序和顺序一致性内存模型 同步原语:主要介绍3个同步原语(synchroized ...

  6. 问题:只能在执行 Render() 的过程中调用 RegisterForEventValidation;结果:只能在执行 Render() 的过程中调用 RegisterForEventValidation

    只能在执行 Render() 的过程中调用 RegisterForEventValidation 当在导出Execl或Word的时候,会发生只能在执行 Render() 的过程中调用 Register ...

  7. Delphi XE2 新控件 布局Panel TGridPanel TFlowPanel

    Delphi XE2 新控件 Firemonkey 布局Panel Windows平台VCl TGridPanel TFlowPanel FMX 跨平台 TLayout TGridLayout TFl ...

  8. linux命令-df查看磁盘命令

    格式 df -h 人性化变换数据单位 -k 数据以k为单位 -m 数据以m为单位 -i  查看indoe使用情况 free(查看swap)

  9. CentOS 6.3 下编译Nginx(笔记整理)

    1. 安装关联程序 [root@localhost opt]# yum search gcc [root@localhost opt]# yum install gcc-c++ [root@local ...

  10. 由浅入深漫谈margin属性

    margin 在中文中我们翻译成外边距或者外补白(本文中引用外边距).他是元素盒模型(box model)的基础属性. 一.margin的基本特性 margin 属性包括 margin-top, ma ...