本文概述
- 要求
- 实现
- 例子
但是不用担心, 如果你不想自己实现操纵杆, 那么这里有一个免费的解决方案, 你将在本文中学习如何实现它。
要求 我们将依赖于phaser-vjoy-plugin, 此插件是Phaser.io的虚拟Joystick插件。并非所有人的手指长度相同, 屏幕尺寸也不相同。用户拥有大量的不同设备和配置, 并且处理所有这些可能性会使我们抓狂, 这就是VJoy存在的原因。
你可以使用bower获取该插件的副本:
bower install phaser-vjoy-plugin
或在Github中下载存储库的.zip文件, 或仅在此处复制存储库中的vjoy.js文件内容。这个插件是由非正式企鹅的人开发的。
注意:此插件在移动设备上的运行效果非常好, 但台式机浏览器并非如此, 因此只能将其用于移动游戏。
实现 VJoy的实现非常容易且非常简单, 因此你只需遵循以下四个步骤, 就可以开始了。
1.加载所需的文件
在继续之前, 请继续在文档中添加所需的文件。使用脚本标签加载Phaser和VJoy插件:
<
!-- Add phaser from the cdn or a local source -->
<
script src="http://img.readke.com/220524/05531461J-0.jpg">
<
/script>
<
!-- Add the VJoy plugin -->
<
script src="http://www.srcmini.com/vjoy.js">
<
/script>
让我们继续进行配置!
2.在Phaser.js中注册插件
要使用VJoy插件, 我们需要告诉Phaser我们正在将其用作插件。要注册插件, 请使用game.plugins.add方法并将Vjoy实例(Phaser.Plugin.VJoy)作为第一个参数, 并将返回的值保存在变量中(在本例中为game.vjoy, 以提供更多可访问性)。
此外, 你需要使用game.vjoy.inputEnable方法指定应在其中启用操纵杆的画布区域。此方法需要4个参数, 分别等于包含操纵杆的矩形所在的坐标(x1, y1, x2, y2)。
var game = new Phaser.Game(800, 600, Phaser.AUTO, 'phaser-joystick', {create: function create() {// Register the VJoy plugin game.vjoy = game.plugins.add(Phaser.Plugin.VJoy);
// Select an area of the canvas where the joystick should be available// It draws a rectangle using Phaser.Rectangle// It takes as Arguments 4 coordinates (x1, y1, x2, y2)// With a canvas of 800x600, the following code will allow the joystick// to move in the left area of the screengame.vjoy.inputEnable(0, 0, 400, 600);
}});
现在已经注册了插件(在这种情况下, 在屏幕的左半部分), 我们需要加载操纵杆的资源(图像)。
3.预加载游戏杆资产
该插件将需要自动使用标识符[vjoy_base, vjoy_body和vjoy_cap]来加载组成操纵杆的图像, 因此, 你必须查找它们以将其作为相位器加载到Phaser的预加载功能中。请记住, 操纵杆的部件(图像)位于此处的VJoy github存储库的assets目录中。
var game = new Phaser.Game(800, 600, Phaser.AUTO, "phaser-joystick", {preload: function preload() {// Load the followings assets [vjoy_base, vjoy_body, vjoy_cap] with images// Note that you can customize them as you wish as long as they keep the// width of the default imagesgame.load.image('vjoy_base', 'assets/base.png');
game.load.image('vjoy_body', 'assets/body.png');
game.load.image('vjoy_cap', 'assets/cap.png');
}});
如果不加载图像, 则会在控制台中找到一些警告, 例如:
Phaser.Cache.getImage:在缓存中找不到键” vjoy_base” 。
Phaser.Cache.getImage:在缓存中找不到键” vjoy_body” 。
Phaser.Cache.getImage:在缓存中找不到键” vjoy_cap” 。
4.处理更新功能中的操作
现在, 你已经注册了插件并加载了资产, 现在你需要处理用户使用操纵杆时发生的情况。
var game = new Phaser.Game(800, 600, Phaser.AUTO, "phaser-joystick", {update: function update() {// Retrieve the cursors valuevar cursors = game.vjoy.cursors;
if (cursors.left) {// Do something if dragging to left} else if (cursors.right) {// Do something if dragging to right}if (cursors.up) {// Do something if dragging up} else if (cursors.down) {//Do something if dragging down}}});
由你决定应根据操纵杆的方向执行哪些操作。注意, 你甚至可以修改if语句以允许垂直移动。
例子 以下html文档显示了一个示例, 该示例根据操纵杆的方向在画布中移动图像:
<
!DOCTYPE html>
<
html>
<
head lang="en">
<
meta charset="UTF-8">
<
title>
Free Touch Joystick for Phaser.js<
/title>
<
style>
#phaser-joystick {margin: 0 auto;
width: 800px;
}<
/style>
<
/head>
<
body>
<
!-- Add a canvas -->
<
div id="phaser-joystick">
<
/div>
<
script src="http://img.readke.com/220524/05531461J-0.jpg">
<
/script>
<
script src="http://www.srcmini.com/vjoy.js">
<
/script>
<
script>
/* To make your code more maintable, add the JS code in JS files */(function (Phaser) {'use strict';
var sprite;
var GameConfig = {preload: function preload() {/*** Load the images */game.load.image('logo', 'assets/ourcodeworld-logo.png');
game.load.image('vjoy_base', 'assets/base.png');
game.load.image('vjoy_body', 'assets/body.png');
game.load.image('vjoy_cap', 'assets/cap.png');
}, create: function create() {// Set a gray as background colorgame.stage.backgroundColor = '#f7f7f7';
sprite = game.add.sprite(300, 300, 'logo');
game.vjoy = game.plugins.add(Phaser.Plugin.VJoy);
game.vjoy.inputEnable(0, 0, 400, 600);
game.vjoy.speed = {x:500, y:500};
}, update: function update() {/*** Important to get the cursors on the update function*/var cursors = game.vjoy.cursors;
// If to left or rightif (cursors.left) {sprite.x--;
} else if (cursors.right) {sprite.x++;
}// If up or downif (cursors.up) {sprite.y--;
} else if (cursors.down) {sprite.y++;
}}};
// Initialize gamevar game = new Phaser.Game(800, 600, Phaser.AUTO, 'phaser-joystick', GameConfig);
}.call(this, Phaser));
<
/script>
<
/body>
<
/html>
如果使用操纵杆的所有资源和Our Code World的徽标执行上一个示例, 结果应为:
文章图片
编码愉快!
推荐阅读
- 如何根据文件的文件扩展名设置ACE编辑器模式
- 如何使用JavaScript解码图像中的QR码
- JavaScript语言中的语音识别API入门
- 如何使用JavaScript在浏览器中轻松创建寻字游戏(字母汤)
- 如何在Windows中使用命令提示符使用PhantomJS
- 如何在JavaScript中检查对象是否具有正确的属性
- 如何使用JavaScript和jQuery检测大写锁定(大写)是否按下
- 足不出户,一探古今,打造线上3D数字博物馆!
- UNITY3D 游戏开发之八Unity编译到iPhone运行 Collider 无法正常触发事件解决方案