【发布时间】:2015-11-23 19:40:44
【问题描述】:
刚接触编码,我决定使用从网上提取的 6 张图片创建一个交互式的点击冒险游戏。
我将第一张图片添加到画布上,并在画布上的图片前面放了一个很酷的小动画,但现在我遇到了一个大问题。
整个游戏是在一个画布上完成的,有多个,以及点击事件的分支。
示例:在标题屏幕上,用户可以选择“开始游戏”或“积分”(作为可点击文本完成)。
如果用户选择“开始游戏”,画面切换到2号图,再次点击后,2号图模糊,旁白文字出现在用户面前。然而,如果他们选择“学分”,则屏幕转而切换到不同的图片,即图片编号 3。在图片编号 3 上,学分以缓慢的自动向上滚动方式显示。
我在网上查到了这个,但我通常会在我正在寻找的大致范围内得到答案,我发现的一些结果是开关案例(对它们没有太多经验,更不用说进行 BRANCHING 开关了案例),用于交互式故事讲述、事件处理程序等的 Undum 框架。
我没有太多使用 Javascript 或画布,在我处理这个项目之前,我认为最好直接提出我的项目问题并获得经验丰富的意见,以及将项目逐个分解并形成某种攻击方法。
知道这个项目将如何运作,你们会推荐我使用哪些资源或编码方法?这个“分支”动画树会是什么样子?
这是我目前的代码:
-- HTML--
<html>
<head>
<title>Detective</title>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
<%= csrf_meta_tags %>
<!-- load in the jquery -->
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0-alpha1/jquery.js">
</script>
</head>
<body>
</body>
</html>
-- CSS --
body{
background:#000;
width: 100%;
height: 100%;
overflow:hidden;
}
canvas{
/*the code below this activates the canvas border, turn it on to visibly see how big the canvas is */
/* border: 1px solid red;*/
position: absolute;
top:0;
bottom: 0;
left: 0;
right: 0;
margin:auto;
display: none;
}
@font-face{
font-family: 'Betty Noir Regular';
src: url('/assets/bettynoir.ttf');
}
-- JS--
var canvas = document.createElement('canvas');
var w = canvas.width = 800,
h = canvas.height = 400;
var c = canvas.getContext('2d');
var img = new Image();
img.src = 'http://oi41.tinypic.com/4i2aso.jpg';
var background = new Image();
background.src = "https://i2.wp.com/i2.listal.com/image/2669447/500full.jpg";
var position = {x : 410, y : 238};
document.body.appendChild(canvas);
var particles = [];
var random = function(min, max){
return Math.random()*(max-min)*min;
};
function Particle(x, y){
this.x = x;
this.y = y;
this.velY = -2;
this.velX = (random(1, 10)-5)/10;
this.size = random(3, 5)/10;
this.alpha = 1;
this.update = function(){
this.y += this.velY;
this.x += this.velX;
this.velY *= 0.99;
if(this.alpha < 0){this.alpha = 0;}
c.globalAlpha = this.alpha;
c.save();
c.translate(this.x, this.y);
c.scale(this.size, this.size);
c.drawImage(img, -img.width/2, -img.height/2);
c.restore();
this.alpha *= 0.96;
this.size += 0.02;//
};
}
var draw = function(){
var p = new Particle(position.x, position.y);
particles.push(p);
// draw the background image before you draw the particles
c.drawImage(background,160,0);
c.font="20px Betty Noir Regular";
c.fillStyle = "white";
c.fillText("Start",500,200);
c.font="20px Betty Noir Regular";
c.fillStyle = "white";
c.fillText("Credits",500,250);
while(particles.length > 500) particles.shift();
for(var i = 0; i < particles.length; i++)
{
particles[i].update();
}
};
setInterval(draw, 3500/60);
$(document).ready(function() {
$("canvas").fadeIn(7000);
});
$(document).ready(function() {
$("#noir-song").get(0).play();
});
【问题讨论】:
标签: javascript html canvas branch