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

 1 <!DOCTYPE html>
 2 <html lang="en">
 3     <head>
 4         <meta charset="utf-8" />
 5         <title>HTML5 Game Development - Lesson 5 | Script Tutorials</title>
 6         <link href="css/main.css" rel="stylesheet" type="text/css" />
 7         <script src="js/jquery-2.0.0.min.js"></script>
 8         <script src="js/script.js"></script>
 9     </head>
10     <body>
11         <header>
12             <h2>HTML5 Game Development - Lesson 5</h2>
13             <a href="http://www.script-tutorials.com/html5-game-development-lesson-5/" class="stuts">Back to original tutorial on <span>Script Tutorials</span></a>
14         </header>
15         <div class="container">
16             <div class="bar">
17                 <button id="options">Options</button>
18             </div>
19             <canvas id="scene" width="800" height="600"></canvas>
20             <div id="controls">
21                 <div id="dialogs" class="dialogs">
22                     <div id="dialog1" class="dialog dialogVisible">
23                         <h1>Welcome to lesson #5</h1>
24                         <textarea>
25                             Please click buttons from 0 to 9 to produce different sounds.
26                             Please click buttons from 0 to 9 to produce different sounds.
27                             Please click buttons from 0 to 9 to produce different sounds.
28                             Please click buttons from 0 to 9 to produce different sounds.
29                             Please click buttons from 0 to 9 to produce different sounds.
30                             Please click buttons from 0 to 9 to produce different sounds.
31                             Please click buttons from 0 to 9 to produce different sounds.
32                             Please click buttons from 0 to 9 to produce different sounds.                        
33                         </textarea>
34                         <button id="but1">Next</button>
35                     </div>
36                     <div id="dialog2" class="dialog">
37                         <h1>Second page</h1>
38                         <textarea>
39                             Plus, this is are also a demonstration of DOM-based dialog windows with CSS3 and jQuery.
40                             Plus, this is are also a demonstration of DOM-based dialog windows with CSS3 and jQuery.
41                             Plus, this is are also a demonstration of DOM-based dialog windows with CSS3 and jQuery.
42                             Plus, this is are also a demonstration of DOM-based dialog windows with CSS3 and jQuery.
43                             Plus, this is are also a demonstration of DOM-based dialog windows with CSS3 and jQuery.
44                         </textarea>
45                         <button id="but2">Next</button>
46                     </div>
47                     <div id="dialog3" class="dialog">
48                         <h1>Third page</h1>
49                         <button id="but3">First page</button>
50                         <button id="but_close">Close</button>
51                     </div>
52                 </div>
53             </div>
54         </div>
55     </body>
56 </html>

上面代码中,我们的Canvas里,我添加了控制条(该控制条可以放一些操作按钮),目前它包含一个按钮,用来显示对话框的。在Canvas下面是一系列的对话框信息。

第二步 CSS

下面是CSS的层叠样式

  1 /* page layout styles */
  2 *{
  3     margin:0;
  4     padding:0;
  5 }
  6 body {
  7     background-color:#eee;
  8     color:#fff;
  9     font:14px/1.3 Arial,sans-serif;
 10 }
 11 header {
 12     background-color:#212121;
 13     box-shadow: 0 -1px 2px #111111;
 14     display:block;
 15     height:70px;
 16     position:relative;
 17     width:100%;
 18     z-index:100;
 19 }
 20 header h2{
 21     font-size:22px;
 22     font-weight:normal;
 23     left:50%;
 24     margin-left:-400px;
 25     padding:22px 0;
 26     position:absolute;
 27     width:540px;
 28 }
 29 header a.stuts,a.stuts:visited{
 30     border:none;
 31     text-decoration:none;
 32     color:#fcfcfc;
 33     font-size:14px;
 34     left:50%;
 35     line-height:31px;
 36     margin:23px 0 0 110px;
 37     position:absolute;
 38     top:0;
 39 }
 40 header .stuts span {
 41     font-size:22px;
 42     font-weight:bold;
 43     margin-left:5px;
 44 }
 45 .container {
 46     margin: 20px auto;
 47     overflow: hidden;
 48     position: relative;
 49     width: 800px;
 50 }
 51 
 52 /* game lesson styles */
 53 .bar {
 54     background-color: #337755;
 55     height: 0;
 56     opacity: 0.9;
 57     overflow: hidden;
 58     position: absolute;
 59     width: 800px;
 60     z-index: 10;
 61 
 62     -moz-transition: 1s;
 63     -ms-transition: 1s;
 64     -o-transition: 1s;
 65     -webkit-transition: 1s;
 66     transition: 1s;
 67 }
 68 .bar button {
 69     padding:3px;
 70     float:right;
 71 }
 72 .barVisible {
 73     height: 30px;
 74 }
 75 #scene {
 76     position:relative;
 77 }
 78 #controls {
 79     height: 600px;
 80     opacity: 1;
 81     position: absolute;
 82     top: 0;
 83     width: 800px;
 84     z-index: 1;
 85 
 86     -moz-transition: 1s;
 87     -ms-transition: 1s;
 88     -o-transition: 1s;
 89     -webkit-transition: 1s;
 90     transition: 1s;
 91 }
 92 .controlsPanel {
 93     height:80px;
 94     opacity: 0 !important;
 95     width:120px;
 96     z-index: -1 !important;
 97 
 98     -moz-transform: scale(0.2);
 99     -ms-transform: scale(0.2);
100     -o-transform: scale(0.2);
101     -webkit-transform: scale(0.2);
102     transform: scale(0.2);
103 }
104 #controls .dialogs {
105     height: 400px;
106     margin: 100px auto;
107     overflow: hidden;
108     position: relative;
109     width: 600px;
110 
111     -moz-transition: 1s;
112     -ms-transition: 1s;
113     -o-transition: 1s;
114     -webkit-transition: 1s;
115     transition: 1s;
116 }
117 #controls .dialog {
118     background-color: #444;
119     border-radius: 25px;
120     display: none;
121     height: 400px;
122     opacity: 0.95;
123     position: absolute;
124     text-align: center;
125     width: 600px;
126 
127     -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); 
128 
129     -moz-transition: 1s;
130     -ms-transition: 1s;
131     -o-transition: 1s;
132     -webkit-transition: 1s;
133     transition: 1s;
134 }
135 #controls .dialogVisible {
136     display:block;
137 }
138 #controls .dialog > * {
139     margin-bottom:20px;
140 }
141 #controls .dialog h1 {
142     font-size: 36px;
143     padding-top: 50px;
144     position: relative;
145     text-align: center;
146 }
147 #controls .dialog textarea {
148     display: block;
149     height: 150px;
150     margin: 0 auto 20px;
151     width: 400px;
152 }
153 #controls .dialog button {
154     border-radius:20px;
155     border-width:2px;
156     width:100px;
157     height:60px;
158 
159     -moz-transition: 1s;
160     -ms-transition: 1s;
161     -o-transition: 1s;
162     -webkit-transition: 1s;
163     transition: 1s;
164 }
165 #controls .dialog button:hover {
166     border-radius:30px;
167     border-width:4px;
168     width:120px;
169 }
170 
171 /* customized scrollbar */
172 #controls .dialog textarea::-webkit-scrollbar {
173     width: 12px;
174 }
175 #controls .dialog textarea::-webkit-scrollbar-track {
176     -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);
177     -webkit-border-radius: 10px;
178     border-radius: 10px;
179 }
180 #controls .dialog textarea::-webkit-scrollbar-thumb {
181     -webkit-border-radius: 10px;
182     border-radius: 10px;
183     background: rgba(255,0,0,0.8);
184     -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5);
185 }
186 #controls .dialog textarea::-webkit-scrollbar-thumb:window-inactive {
187     background: rgba(255,0,0,0.4);
188 }

在上面代码的最后部分,你可以看见我是如何用CSS3来定制文本区的滚动条样式,目前这个功能只能在Chrome浏览器上工作(firefox也可以了)

第三步:JS

js/script.js

  1 //内部变量
  2 var canvas, ctx;
  3 var image;
  4 var sounds = [];
  5 var lastColor = 'rgba(255, 128, 0, 0.5)';
  6 
  7 //清楚画布
  8 function clear() {
  9     ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
 10 }
 11 
 12 //
 13 function drawScene() {
 14     clear();
 15     ctx.drawImage(image, 0, 0);
 16 
 17     ctx.fillStyle = lastColor;
 18     ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);
 19 }
 20 
 21 //初始化
 22 $(function() {
 23     canvas = document.getElementById('scene');
 24     ctx = canvas.getContext('2d');
 25 
 26     var width = canvas.width;
 27     var height = canvas.height;
 28 
 29     //加载背景图片
 30     image = new Image();
 31     image.src = 'images/synthesizer.png';
 32     image.onload = function() {}
 33     image.onerror = function() {
 34         console.log('Error loading the background image.');
 35     }
 36 
 37     //每个按键的声音
 38     sounds[0] = new Audio('media/button-1.wav');
 39     sounds[0].volume = 0.9;
 40     sounds[1] = new Audio('media/button-2.wav');
 41     sounds[1].volume = 0.9;
 42     sounds[2] = new Audio('media/button-3.wav');
 43     sounds[2].volume = 0.9;
 44     sounds[3] = new Audio('media/button-4.wav');
 45     sounds[3].volume = 0.9;
 46     sounds[4] = new Audio('media/button-5.wav');
 47     sounds[4].volume = 0.9;
 48     sounds[5] = new Audio('media/button-6.wav');
 49     sounds[5].volume = 0.9;
 50     sounds[6] = new Audio('media/button-7.wav');
 51     sounds[6].volume = 0.9;
 52     sounds[7] = new Audio('media/button-8.wav');
 53     sounds[7].volume = 0.9;
 54     sounds[8] = new Audio('media/button-9.wav');
 55     sounds[8].volume = 0.9;
 56     sounds[9] = new Audio('media/button-10.wav');
 57     sounds[9].volume = 0.9;
 58 
 59     //对话框按钮上的点击事件
 60     $('#but1').click(function() {
 61         $('.dialog').removeClass('dialogVisible');
 62         $('#dialog2').addClass('dialogVisible');
 63     });
 64     $('#but2').click(function() {
 65         $('.dialog').removeClass('dialogVisible');
 66         $('#dialog3').addClass('dialogVisible');
 67     });
 68     $('#but3').click(function() {
 69         $('.dialog').removeClass('dialogVisible');
 70         $('#dialog1').addClass('dialogVisible');
 71     });
 72     $('#but_close').click(function() {
 73         $('#controls').addClass('controlsPanel');
 74         $('.bar').addClass('barVisible');
 75     });
 76     $('#options').click(function() {
 77         $('#controls').removeClass('controlsPanel');
 78         $('.bar').removeClass('barVisible');
 79         $('.dialog').removeClass('dialogVisible');
 80         $('#dialog1').addClass('dialogVisible');
 81     });
 82 
 83     //键盘事件
 84     $(window).keydown(function(event) {
 85         switch (event.keyCode) {
 86             case 48:    // ‘0’ key
 87                 sounds[0].currentTime = 0;
 88                 sounds[0].play();
 89                 lastColor = 'rgba(0, 128, 255, 0.5)';
 90                 break;
 91             case 49:    // ‘1’ key
 92                 sounds[1].currentTime = 0;
 93                 sounds[1].play();
 94                 lastColor = 'rgba(128, 128, 0, 0.5)';
 95                 break;
 96             case 50:   // '2' key
 97                 sounds[2].currentTime = 0;
 98                 sounds[2].play();
 99                 lastColor = 'rgba(255, 128, 0, 0.5)';
100                 break;
101             case 51:
102                 sounds[3].currentTime = 0;
103                 sounds[3].play();
104                 lastColor = 'rgba(0, 255, 0, 0.5)';
105                 break;
106             case 52:
107                 sounds[4].currentTime = 0;
108                 sounds[4].play();
109                 lastColor = 'rgba(128, 255, 0, 0.5)';
110                 break;
111             case 53:
112                 sounds[5].currentTime = 0;
113                 sounds[5].play();
114                 lastColor = 'rgba(255, 255, 0, 0.5)';
115                 break;
116             case 54:
117                 sounds[6].currentTime = 0;
118                 sounds[6].play();
119                 lastColor = 'rgba(0, 0, 0, 0.5)';
120                 break;
121             case 55:
122                 sounds[7].currentTime = 0;
123                 sounds[7].play();
124                 lastColor = 'rgba(0, 128, 0, 0.5)';
125                 break;
126             case 56:
127                 sounds[8].currentTime = 0;
128                 sounds[8].play();
129                 lastColor = 'rgba(0, 255, 0, 0.5)';
130                 break;
131             case 57:
132                 sounds[9].currentTime = 0;
133                 sounds[9].play();
134                 lastColor = 'rgba(128, 128, 255, 0.5)';
135                 break;
136              
137         }
138     });
139     setInterval(drawScene, 200);   //循环重绘
140 });

结论:

  今天,我们复习了在html5中使用声音,并且学习了如何使用CSS3来制作基于DOM的对话框。我将非常高兴看到你们的谢意和评论。好运!

 源代码下载地址:http://www.script-tutorials.com/demos/205/source.zip

原文地址:https://www.cnblogs.com/pigzhu/p/3175160.html