深海空间----从ps绘图到js游戏

       由于特别喜欢owl city的 the  Saltwater  Room,顺应小清新的风格写了一个小游戏,从ps绘图到写 js代码完成了一个小游戏。渣渣游戏,纯属练手,不喜勿喷,哈哈。

亚当扬

首先先准备资源,用ps绘出深海空间的场景。

第一,画出背景图层,用油漆桶工具铺上一层深蓝色RGB(1,17,35)的底色,仿佛深海一般。

背景图层

第二,新建一层图层,在上面铺上一层淡蓝色RGB( 23,143,229)模糊图层,笔刷用模糊的,透明度44%。

模糊图层

第三,再新建一层图层,在上面用稍微深一点的蓝色RGB(41,113,194)作为深海泡泡。用鱼笔刷RGB(11,226,247)画出深海的鱼,然后用模糊画笔在鱼点缀出许许蓝光,就像深海里发光的鱼一般。

深海鱼图层

第四,再建一层图层,用浅蓝色,我这里用的RGB值是(111,157,226)。用波纹画笔画出波纹。这样一幅深海空间的画就完成了。

接下来准备程序:

首先js文件,game.js,如下所示:

```

//创建画布

var canvas = document.createElement("canvas");//新建画布

var ctx = canvas.getContext("2d");//新建2d环境

canvas.width = 1024;//画布宽

canvas.height = 600;//画布高

document.body.appendChild(canvas);//在body中添加cavans

//背景图片

var bgReady = false;

var bgImage = new Image();//新建背景图片

bgImage.onload = function () {

bgReady = true;

};

bgImage.src = "images/background.png";//添加背景图片

//redfish图片

var redfishReady = false;

var redfishImage = new Image();

redfishImage.onload = function () {

redfishReady = true;

};

redfishImage.src = "images/redfish.png";

//goldfish图片

var goldfishReady = false;

var goldfishImage = new Image();

goldfishImage.onload = function () {

goldfishReady = true;

};

goldfishImage.src = "images/goldfish.png";

// 创建游戏对象

var redfish = {//创建红色的鱼

speed: 256 // 每秒256像素的移速

};

var goldfish = {};//创建金色的鱼

var goldfishsCaught = 0;//金鱼被抓住的次数

// 键盘控制

var keysDown = {};

//添加键盘按下时的监听事件

addEventListener("keydown", function (e) {

keysDown[e.keyCode] = true;

}, false);

//添加键盘放开时的监听事件

addEventListener("keyup", function (e) {

delete keysDown[e.keyCode];

}, false);

//重置游戏对象的位置

var reset = function () {

//红鱼位于图片中央

redfish.x = canvas.width / 2;

redfish.y = canvas.height / 2;

// 金鱼位于cavans随机位置

goldfish.x = 32 + (Math.random() * (canvas.width - 64));

goldfish.y = 32 + (Math.random() * (canvas.height - 64));

};

// 更新游戏

var update = function (modifier) {

if (38 in keysDown) { // 按下↑

redfish.y -= redfish.speed * modifier;

}

if (40 in keysDown) { // 按下↓

redfish.y += redfish.speed * modifier;

}

if (37 in keysDown) { // 按下←

redfish.x -= redfish.speed * modifier;

}

if (39 in keysDown) { // 按下→

redfish.x += redfish.speed * modifier;

}

// 当两条鱼接触的时候

if (

redfish.x <= (goldfish.x + 32)

&& goldfish.x <= (redfish.x + 32)

&& redfish.y <= (goldfish.y + 32)

&& goldfish.y <= (redfish.y + 32)

) {

++goldfishsCaught;//接触到时,分数++

reset();//重置游戏对象位置

}

};

// 画出对应的图片

var render = function () {

if (bgReady) {

ctx.drawImage(bgImage, 0, 0);

}

if (redfishReady) {

ctx.drawImage(redfishImage, redfish.x, redfish.y);

}

if (goldfishReady) {

ctx.drawImage(goldfishImage, goldfish.x, goldfish.y);

}

// 计分

ctx.fillStyle = "rgb(250, 250, 250)";

ctx.font = "24px Helvetica";

ctx.textAlign = "left";

ctx.textBaseline = "top";

ctx.fillText("计分: " + goldfishsCaught, 32, 32);

};

// 游戏主函数

var main = function () {

var now = Date.now();

var delta = now - then;

//更新游戏

update(delta / 1000);

//渲染图片

render();

then = now;

//执行动画,并请求浏览器调用指定的函数在下一次重绘之前更新动画

requestAnimationFrame(main);

};

//使重绘动画支持各种各样的浏览器

var w = window;

requestAnimationFrame = w.requestAnimationFrame || w.webkitRequestAnimationFrame || w.msRequestAnimationFrame || w.mozRequestAnimationFrame;

// 开始游戏

var then = Date.now();

//重置游戏对象的位置

reset();

//执行游戏主函数

main();


再看一下html:

<!DOCTYPE html>

<html lang="en">

   <head>

        <meta charset="utf-8">

        <title>The SaltyWaterRoom</title>

</head>

<body style="text-align:center">

<div>

      <div style="margin-top:0px">

              <script src="js/game.js"></script>

      </div>

       <div style="margin-bottom">

             <audio width="320"   height="240"   autoplay="autoplay" loop="loop">

                        <source src="music/Owl City-The Saltwater Room.mp3 " type="audio/mp3">

             </audio>

      </div>

</div>

</html>

```

附上github链接:深海空间游戏源码地址 













































































































最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,012评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,628评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,653评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,485评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,574评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,590评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,596评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,340评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,794评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,102评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,276评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,940评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,583评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,201评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,441评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,173评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,136评论 2 352

推荐阅读更多精彩内容

  • 一:canvas简介 1.1什么是canvas? ①:canvas是HTML5提供的一种新标签 ②:HTML5 ...
    GreenHand1阅读 4,679评论 2 32
  • 一、canvas简介 1.1 什么是canvas?(了解) 是HTML5提供的一种新标签 Canvas是一个矩形区...
    Looog阅读 3,940评论 3 40
  • 一、canvas简介 1.1 什么是canvas?(了解) 是HTML5提供的一种新标签 Canvas是一个矩形区...
    J_L_L阅读 1,513评论 0 4
  • 啥是canvas? HTML5 标签用于绘制图像(通过脚本,通常是 JavaScript)。不过, 元素本身...
    kiaizi阅读 767评论 0 4
  • 译者语:我没有任何技术背景,翻译这篇文章挺费劲,Google,维基百科左右相伴。感谢我的同事,程序宋少和美术李大师...
    Ginny阅读 464评论 0 1