HTML5游戏开发系列教程5(译)
原文地址:http://www.script-tutorials.com/html5-game-development-lesson-5/
最终我决定准备下一篇游戏开发系列的文章,我们将继续使用canvas来进行HTML5游戏开发系列的文章。今天我准备音乐的例子(有点儿像音乐合成器),它用到了使用CSS3来制作的基于DOM的对话框。为什么我使用独立的对话框--简单,最主要是因为CSS有很多处理标准元素的文本和样式的方法,且它可以使JS的代码简单,同时能提升例子程序的速度。所以你可以对这些对话框应用特定的样式,例如我利用CSS3定制了一个滚动条。
前一篇的的介绍在HTML5游戏开发系列教程4(译)。
第一步:HTML
下面是我们第5课的源代码
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>HTML5 Game Development - Lesson 5 | Script Tutorials</title>
<link href="css/main.css" rel="stylesheet" type="text/css" />
<script src="js/jquery-2.0.0.min.js"></script>
<script src="js/script.js"></script>
</head>
<body>
<header>
<h2>HTML5 Game Development - Lesson 5</h2>
<a href="http://www.script-tutorials.com/html5-game-development-lesson-5/" class="stuts">Back to original tutorial on <span>Script Tutorials</span></a>
</header>
<div class="container">
<div class="bar">
<button id="options">Options</button>
</div>
<canvas id="scene" width="800" height="600"></canvas>
<div id="controls">
<div id="dialogs" class="dialogs">
<div id="dialog1" class="dialog dialogVisible">
<h1>Welcome to lesson #5</h1>
<textarea>
Please click buttons from 0 to 9 to produce different sounds.
Please click buttons from 0 to 9 to produce different sounds.
Please click buttons from 0 to 9 to produce different sounds.
Please click buttons from 0 to 9 to produce different sounds.
Please click buttons from 0 to 9 to produce different sounds.
Please click buttons from 0 to 9 to produce different sounds.
Please click buttons from 0 to 9 to produce different sounds.
Please click buttons from 0 to 9 to produce different sounds.
</textarea>
<button id="but1">Next</button>
</div>
<div id="dialog2" class="dialog">
<h1>Second page</h1>
<textarea>
Plus, this is are also a demonstration of DOM-based dialog windows with CSS3 and jQuery.
Plus, this is are also a demonstration of DOM-based dialog windows with CSS3 and jQuery.
Plus, this is are also a demonstration of DOM-based dialog windows with CSS3 and jQuery.
Plus, this is are also a demonstration of DOM-based dialog windows with CSS3 and jQuery.
Plus, this is are also a demonstration of DOM-based dialog windows with CSS3 and jQuery.
</textarea>
<button id="but2">Next</button>
</div>
<div id="dialog3" class="dialog">
<h1>Third page</h1>
<button id="but3">First page</button>
<button id="but_close">Close</button>
</div>
</div>
</div>
</div>
</body>
</html>
上面代码中,我们的Canvas里,我添加了控制条(该控制条可以放一些操作按钮),目前它包含一个按钮,用来显示对话框的。在Canvas下面是一系列的对话框信息。
第二步 CSS
下面是CSS的层叠样式
/* page layout styles */
*{
margin:;
padding:;
}
body {
background-color:#eee;
color:#fff;
font:14px/1.3 Arial,sans-serif;
}
header {
background-color:#212121;
box-shadow: 0 -1px 2px #111111;
display:block;
height:70px;
position:relative;
width:100%;
z-index:;
}
header h2{
font-size:22px;
font-weight:normal;
left:50%;
margin-left:-400px;
padding:22px 0;
position:absolute;
width:540px;
}
header a.stuts,a.stuts:visited{
border:none;
text-decoration:none;
color:#fcfcfc;
font-size:14px;
left:50%;
line-height:31px;
margin:23px 0 0 110px;
position:absolute;
top:;
}
header .stuts span {
font-size:22px;
font-weight:bold;
margin-left:5px;
}
.container {
margin: 20px auto;
overflow: hidden;
position: relative;
width: 800px;
} /* game lesson styles */
.bar {
background-color: #337755;
height:;
opacity: 0.9;
overflow: hidden;
position: absolute;
width: 800px;
z-index:; -moz-transition: 1s;
-ms-transition: 1s;
-o-transition: 1s;
-webkit-transition: 1s;
transition: 1s;
}
.bar button {
padding:3px;
float:right;
}
.barVisible {
height: 30px;
}
#scene {
position:relative;
}
#controls {
height: 600px;
opacity:;
position: absolute;
top:;
width: 800px;
z-index:; -moz-transition: 1s;
-ms-transition: 1s;
-o-transition: 1s;
-webkit-transition: 1s;
transition: 1s;
}
.controlsPanel {
height:80px;
opacity: 0 !important;
width:120px;
z-index: -1 !important; -moz-transform: scale(0.2);
-ms-transform: scale(0.2);
-o-transform: scale(0.2);
-webkit-transform: scale(0.2);
transform: scale(0.2);
}
#controls .dialogs {
height: 400px;
margin: 100px auto;
overflow: hidden;
position: relative;
width: 600px; -moz-transition: 1s;
-ms-transition: 1s;
-o-transition: 1s;
-webkit-transition: 1s;
transition: 1s;
}
#controls .dialog {
background-color: #444;
border-radius: 25px;
display: none;
height: 400px;
opacity: 0.95;
position: absolute;
text-align: center;
width: 600px; -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); -moz-transition: 1s;
-ms-transition: 1s;
-o-transition: 1s;
-webkit-transition: 1s;
transition: 1s;
}
#controls .dialogVisible {
display:block;
}
#controls .dialog > * {
margin-bottom:20px;
}
#controls .dialog h1 {
font-size: 36px;
padding-top: 50px;
position: relative;
text-align: center;
}
#controls .dialog textarea {
display: block;
height: 150px;
margin: 0 auto 20px;
width: 400px;
}
#controls .dialog button {
border-radius:20px;
border-width:2px;
width:100px;
height:60px; -moz-transition: 1s;
-ms-transition: 1s;
-o-transition: 1s;
-webkit-transition: 1s;
transition: 1s;
}
#controls .dialog button:hover {
border-radius:30px;
border-width:4px;
width:120px;
} /* customized scrollbar */
#controls .dialog textarea::-webkit-scrollbar {
width: 12px;
}
#controls .dialog textarea::-webkit-scrollbar-track {
-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);
-webkit-border-radius: 10px;
border-radius: 10px;
}
#controls .dialog textarea::-webkit-scrollbar-thumb {
-webkit-border-radius: 10px;
border-radius: 10px;
background: rgba(255,0,0,0.8);
-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5);
}
#controls .dialog textarea::-webkit-scrollbar-thumb:window-inactive {
background: rgba(255,0,0,0.4);
}
在上面代码的最后部分,你可以看见我是如何用CSS3来定制文本区的滚动条样式,目前这个功能只能在Chrome浏览器上工作(firefox也可以了)
第三步:JS
js/script.js
//内部变量
var canvas, ctx;
var image;
var sounds = [];
var lastColor = 'rgba(255, 128, 0, 0.5)'; //清楚画布
function clear() {
ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
} //
function drawScene() {
clear();
ctx.drawImage(image, 0, 0); ctx.fillStyle = lastColor;
ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);
} //初始化
$(function() {
canvas = document.getElementById('scene');
ctx = canvas.getContext('2d'); var width = canvas.width;
var height = canvas.height; //加载背景图片
image = new Image();
image.src = 'images/synthesizer.png';
image.onload = function() {}
image.onerror = function() {
console.log('Error loading the background image.');
} //每个按键的声音
sounds[0] = new Audio('media/button-1.wav');
sounds[0].volume = 0.9;
sounds[1] = new Audio('media/button-2.wav');
sounds[1].volume = 0.9;
sounds[2] = new Audio('media/button-3.wav');
sounds[2].volume = 0.9;
sounds[3] = new Audio('media/button-4.wav');
sounds[3].volume = 0.9;
sounds[4] = new Audio('media/button-5.wav');
sounds[4].volume = 0.9;
sounds[5] = new Audio('media/button-6.wav');
sounds[5].volume = 0.9;
sounds[6] = new Audio('media/button-7.wav');
sounds[6].volume = 0.9;
sounds[7] = new Audio('media/button-8.wav');
sounds[7].volume = 0.9;
sounds[8] = new Audio('media/button-9.wav');
sounds[8].volume = 0.9;
sounds[9] = new Audio('media/button-10.wav');
sounds[9].volume = 0.9; //对话框按钮上的点击事件
$('#but1').click(function() {
$('.dialog').removeClass('dialogVisible');
$('#dialog2').addClass('dialogVisible');
});
$('#but2').click(function() {
$('.dialog').removeClass('dialogVisible');
$('#dialog3').addClass('dialogVisible');
});
$('#but3').click(function() {
$('.dialog').removeClass('dialogVisible');
$('#dialog1').addClass('dialogVisible');
});
$('#but_close').click(function() {
$('#controls').addClass('controlsPanel');
$('.bar').addClass('barVisible');
});
$('#options').click(function() {
$('#controls').removeClass('controlsPanel');
$('.bar').removeClass('barVisible');
$('.dialog').removeClass('dialogVisible');
$('#dialog1').addClass('dialogVisible');
}); //键盘事件
$(window).keydown(function(event) {
switch (event.keyCode) {
case 48: // ‘0’ key
sounds[0].currentTime = 0;
sounds[0].play();
lastColor = 'rgba(0, 128, 255, 0.5)';
break;
case 49: // ‘1’ key
sounds[1].currentTime = 0;
sounds[1].play();
lastColor = 'rgba(128, 128, 0, 0.5)';
break;
case 50: // '2' key
sounds[2].currentTime = 0;
sounds[2].play();
lastColor = 'rgba(255, 128, 0, 0.5)';
break;
case 51:
sounds[3].currentTime = 0;
sounds[3].play();
lastColor = 'rgba(0, 255, 0, 0.5)';
break;
case 52:
sounds[4].currentTime = 0;
sounds[4].play();
lastColor = 'rgba(128, 255, 0, 0.5)';
break;
case 53:
sounds[5].currentTime = 0;
sounds[5].play();
lastColor = 'rgba(255, 255, 0, 0.5)';
break;
case 54:
sounds[6].currentTime = 0;
sounds[6].play();
lastColor = 'rgba(0, 0, 0, 0.5)';
break;
case 55:
sounds[7].currentTime = 0;
sounds[7].play();
lastColor = 'rgba(0, 128, 0, 0.5)';
break;
case 56:
sounds[8].currentTime = 0;
sounds[8].play();
lastColor = 'rgba(0, 255, 0, 0.5)';
break;
case 57:
sounds[9].currentTime = 0;
sounds[9].play();
lastColor = 'rgba(128, 128, 255, 0.5)';
break; }
});
setInterval(drawScene, 200); //循环重绘
});
结论:
今天,我们复习了在html5中使用声音,并且学习了如何使用CSS3来制作基于DOM的对话框。我将非常高兴看到你们的谢意和评论。好运!
源代码下载地址:http://www.script-tutorials.com/demos/205/source.zip
HTML5游戏开发系列教程5(译)的更多相关文章
- HTML5游戏开发系列教程7(译)
原文地址:http://www.script-tutorials.com/html5-game-development-lesson-7/ 今天我们将完成我们第一个完整的游戏--打砖块.这次教程中,将 ...
- HTML5游戏开发系列教程6(译)
原文地址:http://www.script-tutorials.com/html5-game-development-lesson-6/ 这是我们最新一篇HTML5游戏开发系列文章.我们将继续使用c ...
- HTML5游戏开发系列教程4(译)
原文地址:http://www.script-tutorials.com/html5-game-development-lesson-4/ 这篇文章是我们继续使用canvas来进行HTML5游戏开发系 ...
- HTML5游戏开发系列教程8(译)
原文地址:http://www.script-tutorials.com/html5-game-development-lesson-8/ 这是我们最新一篇HTML5游戏开发系列文章.我们将继续使用c ...
- HTML5游戏开发系列教程10(译)
原文地址:http://www.script-tutorials.com/html5-game-development-lesson-10/ 最后我们将继续使用canvas来进行HTML5游戏开发系列 ...
- HTML5游戏开发系列教程9(译)
原文地址:http://www.script-tutorials.com/html5-game-development-lesson-9/ 今天我们将继续使用canvas来进行HTML5游戏开发系列的 ...
- cocos2d-x游戏开发系列教程-前言
cocos2d-x游戏开发前景: 最近企业对于Cocos2D-X开发人才的用人需求很大,而且所提供的薪资相当可观. 为满足广大向往游戏开发行业同学的需求,特推出适合新手的Cocos2D-X手游开发教程 ...
- cocos2d-x游戏开发系列教程-超级玛丽07-CMGameMap
背景 在上一篇博客中,我们提到CMGameScene,但是CMGameScene只是个框架,实际担任游戏逻辑的是CMGameMap类,这个博文就来了解下CMGameMap 头文件 class CMGa ...
- cocos2d-x游戏开发系列教程-超级玛丽06-CMGameScene
背景 在CMMenuScene中,当用户点击开始游戏时,导演让场景进入到CMGameScene 头文件 class CMGameScene : public cocos2d::CCLayer,publ ...
随机推荐
- 十步理解Sql
很多程序员视 SQL 为洪水猛兽.SQL 是一种为数不多的声明性语言,它的运行方式完全不同于我们所熟知的命令行语言.面向对象的程序语言.甚至是函数语言(尽管有些人认为 SQL 语言也是一种函数式语言) ...
- mysql存储过程,获取指定数据库的某个表的字段信息
DROP PROCEDURE IF EXISTS Proc; DELIMITER //CREATE PROCEDURE Proc(database_name varchar(50),table_nam ...
- 【NLP】主题识别文档
http://www.biostatistic.net/thread-94974-1-1.html http://www.doc88.com/p-9843685205530.html http://w ...
- C++之运行时类型识别RTTI
C++ Code 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 ...
- redhat6.4 zabbix3.0.2安装
zabbix不用说了,很好的服务器监控管理工具,还支持中文哈! 1.添加epel仓库,有更多可用的软件包 rpm -ivh http://download.fedoraproject.org/pub/ ...
- [转]C# 超高速高性能写日志 代码开源
1.需求 需求很简单,就是在C#开发中高速写日志.比如在高并发,高流量的地方需要写日志.我们知道程序在操作磁盘时是比较耗时的,所以我们把日志写到磁盘上会有一定的时间耗在上面,这些并不是我们想看到的 ...
- iOS开发之--打印一堆奇怪东西的解决方案
Xcode8总是打印一堆奇怪的东西.虽然不影响开发,但是看着很不爽.解决的方法就是在Scheme里面添加(name):OS_ACTIVITY_MODE (value):disable 然后再在突出的框 ...
- Web前端设计模式--制作漂亮的弹出层
设计场景: Ben最近在负责一个购书网站,在网站的首页上,有一个叫做“最新上架”的板块,板块的内容比较简单,只有书籍名称,作者姓名和上架时间(如图),当初设计的时候并i没有过于丰富的构思... 现在问 ...
- 应用开发之WinForm开发
本章简言 上一章笔者介绍了关于WinForm环境.这一章笔者将继续讲WinForm.只不过更加的面向开发了.事实就是在学习工具箱里面的控件.对于WinForm开发来讲,企业对他的要求并没有那么高.但是 ...
- Android无线测试之—UiAutomator UiScrollable API介绍七
滑动到某个对象 一.滑动到某个对象相关API 返回值 API 描述 boolean scrollIntoView(UiSelector selector) 滑动到条件元素所在位置,并且尽量让其居于屏幕 ...