原文地址: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(译)的更多相关文章

  1. HTML5游戏开发系列教程7(译)

    原文地址:http://www.script-tutorials.com/html5-game-development-lesson-7/ 今天我们将完成我们第一个完整的游戏--打砖块.这次教程中,将 ...

  2. HTML5游戏开发系列教程6(译)

    原文地址:http://www.script-tutorials.com/html5-game-development-lesson-6/ 这是我们最新一篇HTML5游戏开发系列文章.我们将继续使用c ...

  3. HTML5游戏开发系列教程4(译)

    原文地址:http://www.script-tutorials.com/html5-game-development-lesson-4/ 这篇文章是我们继续使用canvas来进行HTML5游戏开发系 ...

  4. HTML5游戏开发系列教程8(译)

    原文地址:http://www.script-tutorials.com/html5-game-development-lesson-8/ 这是我们最新一篇HTML5游戏开发系列文章.我们将继续使用c ...

  5. HTML5游戏开发系列教程10(译)

    原文地址:http://www.script-tutorials.com/html5-game-development-lesson-10/ 最后我们将继续使用canvas来进行HTML5游戏开发系列 ...

  6. HTML5游戏开发系列教程9(译)

    原文地址:http://www.script-tutorials.com/html5-game-development-lesson-9/ 今天我们将继续使用canvas来进行HTML5游戏开发系列的 ...

  7. cocos2d-x游戏开发系列教程-前言

    cocos2d-x游戏开发前景: 最近企业对于Cocos2D-X开发人才的用人需求很大,而且所提供的薪资相当可观. 为满足广大向往游戏开发行业同学的需求,特推出适合新手的Cocos2D-X手游开发教程 ...

  8. cocos2d-x游戏开发系列教程-超级玛丽07-CMGameMap

    背景 在上一篇博客中,我们提到CMGameScene,但是CMGameScene只是个框架,实际担任游戏逻辑的是CMGameMap类,这个博文就来了解下CMGameMap 头文件 class CMGa ...

  9. cocos2d-x游戏开发系列教程-超级玛丽06-CMGameScene

    背景 在CMMenuScene中,当用户点击开始游戏时,导演让场景进入到CMGameScene 头文件 class CMGameScene : public cocos2d::CCLayer,publ ...

随机推荐

  1. React 创建自己定义控件

    React是Facebook的内部项目,当时facebook对自己市面上全部的javascript MVC都不惬意,于是就自己创建了一个新的框架.发现还挺好用.于是就开源了,这就是React. Rea ...

  2. ThinkPHP整合cropper剪裁图片上传功能

    1.先下载核心文件:https://github.com/fengyuanchen/cropper 2. 3.对于index.html文件 4.对于main.js文件 5.对于crop.php文件 & ...

  3. oracle和SQLserver数据库中select into 的区别

    在Oracle中是这样的 在SQLserver中是这样的

  4. 通过/proc/sys/net/ipv4/优化Linux下网络性能

    通过/proc/sys/net/ipv4/优化Linux下网络性能 /proc/sys/net/ipv4/优化1)      /proc/sys/net/ipv4/ip_forward该文件表示是否打 ...

  5. Administrator privileges required for OLE Remote Procedure Call debugging: this feature will not work..

    VC++ 6.0单步调试(F10)出现警告框: 解决方法: 右键VC++ 6.0程序图标

  6. iOS开发之--如何修改TabBarItem的title的字体和颜色/BarButtonItem的title的字体大小和颜色/添加背景图片,并添加点击方法

    在进行项目的过程中,我们往往会遇到各种各样的自定义颜色和字体,下面提供一种修改系统自带的TabBarItem的字体和颜色的方法,希望能帮到大家: [[UITabBarItem appearance] ...

  7. Deep Learning的基本思想

    假设我们有一个系统S,它有n层(S1,…Sn),它的输入是I,输出是O,形象地表 示为: I =>S1=>S2=>…..=>Sn => O,如果输出O等于输入I,即输入I ...

  8. smarty 总结和分析

    虽然smarty现在已经废弃不用,但是它的原理我们需要了解一下,这也是TP框架的一部分原理,它把前后端分离开,这样前端只需要写静态网页,后端只需要处理数据库和php文件就可以了,phpcms的思路也大 ...

  9. poj_1464 动态规划

    题目大意 N个节点构成一棵树形结构,在其中若干个节点上放置士兵,与被放置士兵的节点相连的边会被士兵看守.问需要至少在多少个节点上放置士兵,才能使得N-1条边都被看守. 题目分析 题目描述的结构为树形, ...

  10. HDU4417 (Super Mario)

    题目链接:传送门 题目大意:一个大小为 n 的数组,m组询问,每组询问[x,y]内<=v的数的数量. 题目思路:主席树(注意询问时数组下标越界问题) #include <iostream& ...