phaser常用API总结
6. 判断PC或手机
player.inputEnabled = true;
//只能水平方向上拖动
player.input.allowVerticalDrag = false;
//限制主角只能在世界中移动,不能超出屏幕
var dragRect = new Phaser.Rectangle(0,0,gWidth,gHeight);
player.input.enableDrag(false,false,false,255,dragRect);
var playerW = this.player.width;
//是否正在触摸
var touching = false;
//监听按下事件
game.input.onDown.add(function(pointer){
//palyer.x是主角的横向中心,判断是指触摸点在主角的最左侧到最右侧的坐标范围内,
//就是点击的是小人本身,未判断y坐标
if(Math.abs(pointer.x - player.x) < player.width/2){
touching = true;
}
});
//监听离开事件
game.input.onUp.add(function(){
touching = false;
});
//监听滑动事件
game.input.addMoveCallback(function(pointer,x,y,isTap){
if(!isTap && touching){
x = mid(x, playerW/2, gWidth - playerW/2);
player.x = x;
}
}); function mid(mid,min,max){
if(typeof min === undefined || min == null){
min = Number.NEGATIVE_INFINITY;
}
if(typeof max == undefined || max == null){
max = Number.POSITIVE_INFINITY;
}
return Math.min(Math.max(min,mid),max);
}
//定时器添加红包
var redgroup = this.add.group();
this.redgroup = redgroup;
//全组开启body
redgroup.enableBody = true;
//预先创建8个精灵对象
redgroup.createMultiple(8,'redpack');
//红包组全体添加边界检测和边界销毁
redgroup.setAll('outOfBoundsKill',true);
redgroup.setAll('checkWorldBounds',true);
//定时添加红包
game.time.events.loop(300,this.fBuildRedpack,this); //生成红包的函数
this.fBuildRedpack = function(){
//没有自动创建,getFirstDead和getFistExists此处等价
// var item = this.redgroup.getFirstDead(true);
var item = this.redgroup.getFirstExists(false,true);
var left = this.rnd.between(60,gWidth - 60);
if(item){
//由于有超出边界检测,所以不能设置y为负值
item.reset(left,0);
item.scale.set(0.5);
item.body.velocity.y = 300;
item.checkWorldBounds = true;
item.outOfBoundsKill = true;
}
}
//大地
var land = game.add.graphics(0,gHeight-127/2);
land.beginFill(0xce9424);
land.moveTo(0,0);
land.lineTo(gWidth, 0);
land.lineTo(gWidth, gHeight);
land.lineTo(0,gHeight);
13. 开启物理引擎
//全局开启物理引擎
this.physics.startSystem(Phaser.Physics.ARCADE);
//单个对象开启物理引擎
this.physics.arcade.enable(obj);
14. 碰撞检测
//arcade的两种碰撞检测
//碰撞后的对象的消失,一般在update周期中使用overlap方法,碰撞后的回弹效果一般使用collide方法(通常在create周期中),两种方法可以同时使用,不冲突 //有反弹碰撞
game.physics.arcade.collide(this.bird,Chimney); //无反弹碰撞,碰撞回调中有参与碰撞的对象,可以在回调中将对象kill掉
game.physics.arcade.overlap(this.redgroup,this.player,function(player,redpack){
redpack.kill();
},null,null,this);
15. 添加按钮注册点击事件
//图片按钮可以使用精灵来做,精灵可以添加点击事件
this.startButton = this.add.sprite(0,0,'ui','button.png');
this.startButton.anchor.set(0.5);
this.startButton.x = game.world.centerX;
this.startButton.y = game.height - 100;
this.startButton.inputEnabled = true;
this.startButton.input.useHandCursor = true;
this.startButton.events.onInputDown.add(this.startGame,this);
setPreloadSprite(sprite, direction)
sprite:在加载过程中会出现的精灵或图像。
direction:等于0精灵将被水平裁剪,等于1精灵将被垂直裁剪
Loader对象提供了一个 setPreloadSprite 方法,只要把一个sprite对象指定给这个方法,那么这个sprite对象的宽度或高度就会根据当前加载的百分比自动调整,达到一个动态的进度条的效果。
示例代码如下:
var game = new Phaser.Game('100%', '100%', Phaser.AUTO, 'game'); game.States = {}; game.States.boot = function() {
this.preload = function() {
game.load.image('loading', 'img/loading.gif');
}
this.create = function() {
game.state.start('preload');
}
} game.States.preload = function() {
this.preload = function() {
var preloadSprite = game.add.sprite(game.width / 2, game.height / 2, 'loading');
preloadSprite.anchor.setTo(0.5, 0.5);
//用setPreloadSprite方法来实现动态进度条的效果,preloadSprite为load的精灵
game.load.setPreloadSprite(preloadSprite); game.load.image('pipe', 'img/pipe.png');
game.load.image('startBtn', 'img/start.jpg');
game.load.image('helpBtn', 'img/help.jpg');
}
this.create = function() {
game.state.start('menu');
}
}
17. 执行补间动画
Tween对象,是专门用来实现补间动画的。通过game.add的tween方法得到一个Tween对象,这个方法的参数是需要进行补间动画的物体。然后我们可以使用Tween对象的to方法来实现补间动画。
to(properties, duration, ease, autoStart, delay, repeat, yoyo)
properties : 一个js对象,里面包含着需要进行动画的属性,如上面代码中的 {y:120}
duration : 补间动画持续的时间,单位为毫秒
ease : 缓动函数,默认为匀速动画
autoStart : 是否自动开始
delay : 动画开始前的延迟时间,单位为毫秒
repeat : 动画重复的次数,如果需要动画永远循环,则把该值设为 Number.MAX_VALUE
yoyo : 如果该值为true,则动画会自动反转
示例:
game.add.tween(titleGroup).to({ y:120 },1000,null,true,0,Number.MAX_VALUE,true); //对这个组添加一个tween动画,让它不停的上下移动
ground.body.allowGravity = false; //没有重力,不会下沉
// ground.body.immovable = true; //不可移动
// ground.body.collideWorldBounds = true; //如果设置为true,那么这个对象在撞到世界的边界时会被反弹回这个世界。设置为false的话,对象在撞到世界边界时会离开这个世界
//在render周期中写调试代码
this.render = function(){
//game.debug.body用来显示每个物体的物理轮廓,具体显示为绿色的形状
//对组中的每个物体开启物理轮廓
this.redgroup.forEach(function(item){
game.debug.body(item);
});
//对单个物体开启物理轮廓
game.debug.body(this.player); //屏幕上显示一些调试文字
game.debug.text('CodeCaptain Shooting Demo', 10, 30);
game.debug.text('Click or press space / enter to shoot', 10, 55);
}
20. 对组中的元素进行统一操作
var redgroup = this.add.group();
//对组中的物体全部设置属性
redgroup.setAll('checkWorldBounds',true);
//对组中的物体全部调用函数
redgroup.callAll('events.onOutOfBounds.add', 'events.onOutOfBounds', this.fRemoveRedpack);
//设置组中所有物体的anchor为0.5,1.0
redgroup.callAll('anchor.setTo', 'anchor', 0.5, 1.0);
21. 修改物理轮廓,即碰撞的区域
this.update = function(){
//设置小人的物理体积为高度的一半
var playerW = this.player.width,
playerH = this.player.height;
//由于scale 0.5的缘故,宽高设置要加倍
this.player.body.setSize(playerW*2,playerH,0,playerH); //设置方形物理轮廓,前面两个是宽高,后面两个是偏移
this.dragon.body.setSize(this.dragon.width, this.dragon.height / 2, 0, this.dragon.height / 2); //设置圆形物理轮廓
this.dragon.body.setCircle(this.dragon.width / 2);
//恢复一下偏移为0
this.dragon.body.offset.set(0, 0);
}
22. 物体超出边界监测
1. checkWorldBounds 设置超出边界检测
sprite.checkWorldBounds = true;
//对精灵进入边界进行处理
sprite.events.onEnterOfBounds.add(callback,this);
//对精灵离开边界进行处理
sprite.events.onOutOfBounds.add(callback,this); 2. outOfBoundsKill //必须开启checkWorldBound为true
//超出边界后自动kill,包括上下左右任意边界
sprite.checkWorldBounds = true;
sprite.outOfBoundsKill = true;
phaser常用API总结的更多相关文章
- html5 canvas常用api总结(一)
1.监听浏览器加载事件. window.addEventListener("load",eventWindowLoaded,false); load事件在html页面加载结束时发生 ...
- compass General 常用api学习[Sass和compass学习笔记]
compass 中一些常用api 包括一些浏览器hack @import "compass/utilities/general" Clearfix Clearfix 是用来清除浮动 ...
- java基础3.0:Java常用API
本篇介绍Java基础中常用API使用,当然只是简单介绍,围绕重要知识点引入,巩固开发知识,深入了解每个API的使用,查看JavaAPI文档是必不可少的. 一.java.lang包下的API Java常 ...
- C++ 中超类化和子类化常用API
在windows平台上,使用C++实现子类化和超类化常用的API并不多,由于这些API函数的详解和使用方法,网上一大把.本文仅作为笔记,简单的记录一下. 子类化:SetWindowLong,GetWi ...
- node.js整理 02文件操作-常用API
NodeJS不仅能做网络编程,而且能够操作文件. 拷贝 小文件拷贝 var fs = require('fs'); function copy(src, dst) { fs.writeFileSync ...
- js的常用api
JavaScript常用API总结 原创 2016-10-02 story JavaScript 下面是我整理的一些JavaScript常用的API清单. 目录 元素查找 class操作 节点操作 属 ...
- JS操作DOM常用API总结
<JS高程>中的DOM部分写的有些繁琐,还没勇气整理,直到看到了这篇博文 Javascript操作DOM常用API总结,顿时有了一种居高临下,一览全局的感觉.不过有时间还是得自己把书里面的 ...
- request对象常用API 获取请求参数的值 request应用 MVC设计模式
1 request对象常用API 1)表示web浏览器向web服务端的请求 2)url表示访问web应用的完整路径:http://localhost:8080/day06/Demo1 ...
- 【OpenGL游戏开发之二】OpenGL常用API
OpenGL常用API 开发基于OpenGL的应用程序,必须先了解OpenGL的库函数.它采用C语言风格,提供大量的函数来进行图形的处理和显示.OpenGL库函数的命名方式非常有规律.所有OpenGL ...
随机推荐
- php xml转数组 自定义xml_to_array
<?php header("Content-type: text/xml; charset=utf-8"); $con = file_get_contents('xml路径' ...
- Python基本图形绘制
turtle的一个画布空间最小单位是像素 turtle的绘制窗体:turtle.stup(width,heigth,startx,starty) 四个参数中后两个可选 turtle空间坐标体系:tur ...
- Python函数中的参数
形参:形式参数 实参:实际参数 1.普通参数:严格按照顺序将实参赋值给形参. 2.默认参数:必须放置在参数列表的最后. 3.指定参数:将实参赋值给制定参数. 4.动态参数: *:默认将传入的参数,全部 ...
- 深入了解jQuery Mobile-1
介绍 jQuery Mobile是一种触控优化的HTML5 UI框架,旨在制作可在所有智能手机,平板电脑和台式机设备上访问的响应式网站和应用程序 移动页面结构 jQuery Mobile站点必须以HT ...
- node session会话
会话机制: 浏览器-->服务器 浏览器<--服务器 (产生一个会话id,保存在cookie中) 浏览器-->服务器(服务器根据会话id关联到相应数据信息体data) var expr ...
- R语言绘图:词云图
使用wordcloud2绘制词云图 library(wordcloud2) findwords<-function(tf){ txt<-scan(tf,"") wl&l ...
- CERC2017 Gambling Guide,最短路变形,期望dp
题意 给定一个无向图,你需要从1点出发到达n点,你在每一点的时候,使用1个单位的代价,随机得到相邻点的票,但是你可以选择留在原地,也可以选择使用掉这张票,问到达n点的最小代价的方案的期望是多少. 分析 ...
- 小米Pro 15.6 系统重装记录
参考链接:http://bbs.xiaomi.cn/t-14321262,主要是miui论坛和小米社区的一位同学的教程,. 这位同学是针对12.5和13.3的版本做的教程,15.6和之前的版本有一小点 ...
- .net core 新建一个web api 的步骤 初级
1.使用VS2017 选择 .net core web应用程序. 2.选择web api(空). 3.如果需要用iis express调试,则需要修改 program.cs. 4.在Controlle ...
- c/c++容器操作
C++中的容器大致可以分为两个大类:顺序容器和关联容器.顺序容器中包含有顺序容器适配器. 顺序容器:将单一类型元素聚集起来成为容器,然后根据位置来存储和访问这些元素.主要有vector.list.de ...