首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >HTML5游戏(画布)- UI技术?

HTML5游戏(画布)- UI技术?
EN

Stack Overflow用户
提问于 2011-01-04 23:29:08
回答 3查看 4.4K关注 0票数 10

我正在用JavaScript / HTML5 (使用画布)为移动设备(Android / iPhone/ WebOS)和PhoneGap构建一个游戏。我目前正在设计如何构建UI和播放板,以及它们应该如何交互,但我不确定最佳的解决方案是什么。我能想到的是-

  1. 使用drawImage和fillText等工具将UI直接构建到画布中
  2. 使用常规DOM对象在画布之外构建部分UI,然后当UI元素需要重叠播放板画布时,在画布上浮动一个div。

有没有其他可能的技术,我可以用来构建游戏UI,我还没有想到呢?另外,其中哪一种会被认为是“标准”方式(我知道HTML5游戏并不流行,所以可能还没有“标准”方式)?最后,你会推荐/使用哪种方式?

事先非常感谢!

编辑

我已经把这个问题转移到gamedev.stackoverflow.com了。你可以在这里找到一个新的问题:https://gamedev.stackexchange.com/questions/7090/html5-game-canvas-ui-techniques/7115#7115

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-04 23:34:48

我认为这是没有“标准”的。这在很大程度上取决于你的UI。我认为在大多数情况下使用DOM元素更好,因为您不需要自己构建所有UI组件、事件等等。它们可以使用CSS进行样式设计,以达到所需的外观。如果这还不够,您可能需要自己构建接口元素,但是您应该确保这是真正需要的。推出您自己的解决方案可能是一项巨大的工作。

票数 2
EN

Stack Overflow用户

发布于 2012-02-07 20:54:56

你可以用上百万种方法。然而,你觉得最舒服,你的工程师最有信心。

如果您正在寻找灵感或代码示例,下面是我的一种方法。我有一个函数,它反复绘制菜单,直到按下按钮。按下按钮后,将加载游戏并删除旧菜单单击事件侦听器,并添加新的游戏单击事件侦听器。我也结束了旧的抽签循环的菜单,并开始一个新的游戏抽签循环。下面是一些选择的片段,让您了解如何完成这些操作:

代码语言:javascript
运行
复制
Game.prototype.loadMenu = function() {
  var game = this;
  var can = this.canvas;

  // now we can use the mouse for the menu
  can.addEventListener('click', game.menuClickEvent, false);
  can.addEventListener('touchstart', game.menuClickEvent, false);

  // draw menu
  this.loop = setInterval(function() { game.drawMenu() }, 30);
};

Game.prototype.drawMenu = function() {
  // ... draw the menu
}

Game.prototype.loadLevel = function(levelstring) {
  // unload menu
  var can = this.canvas;
  var game = this;
  can.removeEventListener('click', game.menuClickEvent, false);
  can.removeEventListener('touchstart', game.menuClickEvent, false);

  if (this.loop) clearInterval(this.loop);

  // ... other level init stuff


  // now we can press keys for the game
  //can.addEventListener('click', game.gameClickEvent, false);
  can.addEventListener('touchstart', game.gameClickEvent, false);
  can.addEventListener('keydown', game.gameKeyDownEvent, false);

  this.loop = setInterval(function() { game.tick() }, 30);
}

// called from tick()
Game.prototype.draw = function(advanceFrame) {
  // ...
}

通过这种方式,我可以将游戏绘图和游戏事件从菜单绘图和菜单事件中分离出来。如果我想让它们看起来很漂亮的话,它也给了我在菜单中使用游戏/动画元素的空间。

(我也在双胞胎gamedev的讨论中发布了这篇文章)

票数 3
EN

Stack Overflow用户

发布于 2016-02-17 14:35:53

尝试如下:

使用Visual,您可以像这样设置页面:

Visual-JS多平台游戏引擎windows GUI源代码编辑器

OnPage编辑器-用于设计

您将得到的 :

*99%帆布2d

添加新对象

创建网络摄像头组件(nui或normal)

创建联盟(基本-再述)

创建textBox (移动虚拟键盘)

创造粒子

阿塔赫球员(基本动作)

MultipEER (联网)*

localStarage

由visual js创建的应用程序总是可以在所有浏览器(移动/桌面)上工作。

在线试用:https://jsfiddle.net/user/zlatnaspirala/fiddles/

Api如下所示:

Visual JS 0.5 >的应用程序接口文档

GAME_OBJECT是该框架中的主要对象。

代码语言:javascript
运行
复制
1) Adding new game object (name will be 'GO' ):   

HELLO_WORLD.ENGINE.MODULES.ACCESS_MODULE("STARTER").NEW_OBJECT("GO" ,
x , y , w , h , speed )

HELLO_WORLD.ENGINE.MODULES.ACCESS_MODULE("STARTER").NEW_OBJECT( "GO" ,
45   , 45 , 10 , 10 , 10)


// 2) Adding image or animation : 

// DRAW TYPE can be   // 'DRAW_FRAME' no animation   // 'LOOP' playing
animation  // this number '1111123123' is ID  can be any number 
//ANIMATION (  surf ,TYPE_, FrameIndex ,source , PARENT , ID , blink_
, min_ , max_ , step , speed_ , opacity_  )
HELLO_WORLD.ENGINE.MODULES.ACCESS_MODULE("STARTER").GAME_OBJECTS.ACCESS("GO").CREATE_ANIMATION(
SURF , "DRAW_FRAME" , 6 , RESOURCE.Tiles  , 1111123123 , "no" ,
1,11,1,1,1) 


3)Disable draging   GO.DRAG = false;

//  RESOURCE.NAMEOFFOLDERANIMATION

add folder "Tiles"  with images in folder /res/ and run node res.js   

// refresh page and you will get

RESOURCE.Tiles ready for use !   
// MAKE MODULE ACCESS EASY  var

STARTER = HELLO_WORLD.ENGINE.MODULES.ACCESS_MODULE("STARTER");    

STARTER.GAME_OBJECTS.ACCESS("GO").CREATE_ANIMATION( SURF ,
"DRAW_FRAME" , 6 , RESOURCE.Tiles  , 1111123123 , "no" , 1,11,1,1,1) 


//DRAG initial value is true GO.DRAG = false;
//setup quard height  =  width  GO.POSITION.DIMENSION.H = GO.POSITION.DIMENSION.W;

4) EVENTS  FOR MOUSE AND MOBILE TOUCH HANDLED
//CLICK OR TOUCH START  GO.TAP = function(){  

//this make point directing to the game object instance   
//  this.NAME or this.ANIMATION.CURRENT_FRAME   };


GO.TOUCH_DOWN = function(){  

STARTER.DESTROY_OBJECT("GO")        console.log("THIS MUST BE TERMINATED
ON MOUSE DOWN or TOUCH_DOWN  : " + this.NAME);
//this.DESTROY_ME_AFTER_X_SECUND( 100 );    //console.log("THIS MUST BE
TERMINATED ON CLICK : " + this.NAME);      };

GO.TOUCH_MOVE = function(){  
console.log("HOVER ON OBJECT OR MOBILE TOUCH_MOVE  : " + this.NAME);   };

GO.TOUCH_UP = function(){  
console.log("MOUSE UP ON OBJECT OR MOBILE TOUCH_UP  : " + this.NAME);   };*

下载git

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4599509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档