Phaser之TextBox

使用Phaser有一段时间的,越来越喜欢这个游戏引擎,但是它不像egret那样有专业的公司和团队去维护,并提供大量的工具,所以Phaser没有那么多的工具,但是真的很好用。

在做游戏登录界面的时候,发现Phaser没有提供TextBox的控件,在官方的论坛进行搜索以后得到了如下的结论

大部分的情况都是采用DOM的方式来去实现textbox。

本文采用DOM的方式实现了可以自适应Phaser画布的TextBox,效果图如下:

实现步骤如下:

1.自适应屏幕的程序在Phaser提供的模板里,具体可以到Phaser的官网上下载最新的源码,在源码里找到temple文件夹里面的fullscreen工程,因为该工程实现了屏幕的自适应缩放。

2.创建一个名为的js文件

3.在该文件中定义function HtmlTextBox(game,x,y,width,height,text,style),作为使用类

4.实现主要内容

 

this.game = game;this.parentElement = game.canvas.parentNode;//创建一个inputElement
this.textBoxElement = document.createElement(‘input‘);
this.textBoxElement.style.position = ‘absolute‘;
this.textBoxElement.style.left = x+‘px‘;
this.textBoxElement.style.top = y+‘px‘;
this.textBoxElement.style.width = width;
this.textBoxElement.style.height = height;
this.parentElement.insertBefore(this.textBoxElement,game.canvas);

上述代码添加了一个html的input。

5.自适应屏幕
 
上述代码实现了update的时候,根据新的位置计算dom的位置和大小,从而自动适应了屏幕大小。
//更新函数,用来重新计算TextBox的位置
HtmlTextBox.prototype.update  = function()
{
    var canvas = this.game.canvas;

    var canvasX = canvas.offsetLeft;
    var canvasY =  canvas.offsetTop;
    var canvasWidth = canvas.offsetWidth;
    var canvasHeight = canvas.offsetHeight;

    if(this.oldCanvasWidth == canvasWidth && this.oldCanvasHeight == canvasHeight
        && this.oldCanvasX == canvasX && this.oldCanvasY == canvasY)return;

    var gameWidth = this.game.world.width;
    var gameHeight = this.game.world.height;

    var widthScanle = canvasWidth/gameWidth;
    var heightScanle = canvasHeight/gameHeight;

    var xScanle = this._x/gameWidth;
    var yScanle = this._y/gameHeight;

    var newX = canvasX + canvasWidth * xScanle;
    var newY = canvasY + canvasHeight * yScanle;
    var newWidth = this._width * widthScanle;
    var newHeight = this._height * heightScanle;

    this.setX(newX);
    this.setY(newY);
    this.setWidth(newWidth);
    this.setHeight(newHeight);
    this.oldCanvasWidth = canvasWidth;
    this.oldCanvasHeight = canvasHeight;
    this.oldCanvasX = canvasX;
    this.oldCanvasY = canvasY;
}
最后附上这个TextBox的完整的源码。
HtmlTextBox.js
 
 
时间: 2024-08-29 09:44:38

Phaser之TextBox的相关文章

Phaser实现源码剖析

在这里首先说明一下,由于Phaser在4.3代码里是存在,但并没有被开放出来供使用,但已经被本人大致研究了,因此也一并进行剖析. Phaser是一个可以重复利用的同步栅栏,功能上与CyclicBarrier和CountDownLatch相似,不过提供更加灵活的用法.也就是说,Phaser的同步模型与它们差不多.一般运用的场景是一组线程希望同时到达某个执行点后(先到达的会被阻塞),执行一个指定任务,然后这些线程才被唤醒继续执行其它任务. Phaser一般是定义一个parties数(parties一

WPF的TextBox水印效果详解

一种自以为是的方式: 本来只是想简单的做个水印效果,在文本框内容为空的时候提示用户输入,这种需求挺常见.网上一搜 都是丢给你你一大段xaml代码.用c#代码实现我是不倾向了 既然用wpf就得Xaml啊.首先我想到的是template嘛 wpf到处离不开template .我想到的是一个border 套一个textblock嘛 然后让文本内容通过templateBinding到Text嘛 搞得不亦乐乎 ,并且也确实很快就达到了我要的效果: 1 <TextBox> 2 <TextBox.Te

easyui textbox 赋值

$('#fireInfo').textbox('setValue', tempData.fireInfo); $('#fireStartTime').datetimebox('setValue', timeStamp2String(tempData.fireStartTime)); 总结:表单元素使用easyui时,textbox和validatebox设置值和获取值的方式不一样 为text-box设置值只能使用id选择器选择表单元素,只能使用textbox("setValue", v

TextBox控件的DataBindings属性

DataBindings属性是很多控件都有的属性,作用有2方面.一方面是用于与数据库的数据进行绑定,进行数据显示.另一方面用于与控件或类的对象进行数据绑定.这里主要关注后者.主要用法是将某个对象的某个属性与指定对象的指定属性进行关联. Label.TextBox等都包含DataBindings属性,其类型为ControlBindingsCollection,是Binding类的集合.Binding类代表某对象属性值和某控件属性值之间的简单绑定.如可以将TextBox的Text属性值绑定到Labe

2.phaser创建游戏和场景

新建HTML文件 页面内引用phaser文件 phaser.Game创建游戏 phaser种基本的执行函数

C# TextBox Ctrl+A全选

在TextBox控件中使用快捷键,一般要求按下快捷键立刻产生效果,KeyUp事件显然不符合我们的要求,而KeyPress事件中不支持使用组合件,所以我们选用KeyDown事件,具体代码实现如下: private void tBBefore_KeyDown(object sender, KeyEventArgs e) { if (e.Control && e.KeyCode == Keys.A) { ((TextBox)sender).SelectAll(); } }

解决 aspx 页面 TextBox 不支持 type=&quot;number&quot;

安装 framework 4 并且打上补丁 Microsoft .NET Framework 4 可靠性更新 1 (KB2533523) https://www.microsoft.com/zh-cn/download/details.aspx?id=27014 我没有试,但跟据下面的结果来看,安装 4.5应该是可以解决的. <!-- this HTML tested in each .NET version --> <asp:TextBox runat="server&quo

使用Htmlhelper,创建文本框TextBox

下面通过HtmlHelper帮助类,创建文本框. 首先新建一个实体类,做为下面的例子: using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace MVCRestartlearnning.Models { public class Student { /// <summary> /// 学号 /// </summary> public int Stude

c#TextBox输入框自动提示、自动完成、自动补全功能

功能概览 相关属性 TextBox.AutoCompleteCustomSource 属性 获取或设置当 TextBox.AutoCompleteSource 属性设置为 [CustomSource] 时要使用的自定义 T:System.Collections.Specialized.StringCollection. TextBox.AutoCompleteMode 属性 获取或设置一个选项,该选项控制自动完成应用于 TextBox 的方式. 属性值 类型:System.Windows.For