制作动画或小游戏——CreateJS事件(二)
在Canvas中如果要添加事件,就需要计算坐标来模拟各种事件,而EaselJS中已经封装好了多个事件,只需调用即可。
一、事件
1)点击
事件是绑定在Shape类中的,click事件与DOM中的意思是一样的,还有个双击事件dblckick,完整的代码可以查看这里。
var object = new createjs.Shape();
object.addEventListener('click', function(e) {
alert('click');
});
可以用addEventListener来做绑定,如果想要让移动端也支持,就需要在Touch类中调用enable方法。
createjs.Touch.enable(stage);
除了click外,还有好多其它方法,Shape类的所有事件如下:

2)移动
在CSS中有一个“:hover”的伪类,通过这mouseover和mouseout两个事件可以模拟出这个效果。
首先要设置允许触发,引用stage类中的enableMouseOver方法,完整的代码可以在这里查看到。
stage.enableMouseOver();
circle.addEventListener("mouseover", function(e) {
circle.alpha = .5;
stage.update();
});
circle.addEventListener("mouseout", function(e) {
circle.alpha = 1;
stage.update();
});

有两个事件与这两个比较类似,rollover和rollout,有两个地方与上面的两个事件不同。
1. 这两个事件不冒泡
2. 当给Container设置四个事件后,只有当离开容器时触发rollout,进入容器时rollover,而在容器中的子元素进入或离开会分别触发mouseover和mouseout。
下面gif图是一次鼠标移动的过程,总共打印出了四组数据,详细代码可以查看这里。
第一次:是从外面进入蓝色区域。
第二次:是从蓝色区域进入红色区域。
第三次:是从红色区域进入蓝色区域。
第四次:是从蓝色区域进入到外面。

3)拖放
并没有专门的拖放事件,但是可以通过其它事件来模拟。
Shape类中有个mousedown事件,鼠标按下,在这个事件内绑定Stage类的stagemousemove与stagemouseup,
circle.addEventListener('mousedown', function(e) {
stage.addEventListener('stagemousemove', function(e) {
circle.x = stage.mouseX;
circle.y = stage.mouseY;
});
stage.addEventListener('stagemouseup', function(e) {
e.target.removeAllEventListeners();
});
});

完整的代码可以在这里查看,e.target就是canvas对象,内容如下:

Stage类中全部事件如下:

二、颜色拖放小游戏
可以通过上面这些事件制作一个简单的颜色拖放小游戏,详细的代码可以查看这里。

下面是一个片段:
function startDrag(e) {
var shape = e.target;
var slot = slots[shape.key];
stage.setChildIndex(shape, stage.getNumChildren() - 1);
stage.addEventListener('stagemousemove', function(e) {
shape.x = e.stageX;
shape.y = e.stageY;
});
stage.addEventListener('stagemouseup', function(e) {
stage.removeAllEventListeners();
var pt = slot.globalToLocal(stage.mouseX, stage.mouseY);
if (slot.hitTest(pt.x, pt.y)) {
shape.removeEventListener("mousedown", startDrag);
score++;
createjs.Tween.get(shape).to({
x: slot.x,
y: slot.y
}, 200, createjs.Ease.quadOut).call(checkGame);
console.log('h');
} else {
createjs.Tween.get(shape).to({
x: shape.homeX,
y: shape.homeY
}, 200, createjs.Ease.quadOut);
}
});
}
1)事件中的e
Shape类中的 stagemousemove和stagemouseup事件内的参数“e”是一个MouseEvent对象,“stageX”与“stageY”指的是鼠标在画布上的位置。
2)setChildIndex
Stage类中的setChildIndex这个应该与CSS中的“z-index”类似,就是为了不被覆盖住,拖动黄色块的时候,能将静止的块覆盖。

3)globalToLocal
Shape类中globalToLocal方法是做坐标转换,上面的代码是将鼠标的X和Y坐标转换相对于图形的坐标。



第一张图中:蓝色边框左上角的点相对画布原点是(50,30)
第二张图中:将鼠标移动到了(0,8)的位置
第三张图中:a就是经过计算后坐标点(0-50,8-30)
4)hitTest
hitTest测试图像是否与颜色相同的框有交集,并且交集要过了边框的中心点才返回true。


第一张图:过了中心点;第二张图:是没过中心点
三、Text
1)创建文本
在Canvas上可以画出文字,在CreateJS中同样可以,并且还封装了很多方法,将会使用text类。
var text = new createjs.Text("Game Over", "20px Arial", "#ff7700");
text.textBaseline = "middle";
text.textAlign = "center";
stage.addChild(text);
完整的代码可以在这里查看。通过画字,就可以模拟超链接了,还能把“:hover”通过事件模拟出来。

2)DOMElement类
CreateJS还能将canvas外面的DOM元素添加进来,完整的代码可以在这里查看。
<div id="gameHolder">
<div id="instructions" style="width: 400px;height: 300px;border: dashed 2 #008b8b;text-align: center;visibility: hidden">
<h3 style="font-family:arial;">Game Instructions</h3>
<p><strong>Click</strong> on the <span style="color:red">RED</span> balloons as they fall from the sky.</p>
<a href="http://www.cnblogs.com/strick/" target="_blank">pwstrick</a>
</div> <canvas id="canvas" width="500" height="400" style="border: black solid 1px"></canvas>
</div>
与上面的创建文本类似,也是初始化后,添加多个属性。
var de = new createjs.DOMElement(instructions);
de.alpha = 0;
de.regX = 200;
stage.addChild(de);

制作动画或小游戏——CreateJS事件(二)的更多相关文章
- 制作动画或小游戏——CreateJS基础类(一)
前面曾经记录过Canvas的基础知识<让自己也能使用Canvas>,在实际使用中,用封装好的库效率会高点. 使用成熟的库还能对基础知识有更深入的理解,CreateJS是基于HTML5开发的 ...
- [SpriteKit] 制作瓦片地图小游戏
概述 SpriteKit制作瓦片地图游戏,深入了解2D游戏制作过程 详细 代码下载:http://www.demodashi.com/demo/10703.html 说实话这个2D游戏实战的入门看的我 ...
- 制作一个 JavaScript 小游戏
简评: 作者学习了编程两个月,边学边做了一个 JavaScript 小游戏,在文中总结了自己在这个过程中的一些体会,希望能给其他初学者一些帮助. 对于很多想学编程但一直没下定决心的同学来说,最大的问题 ...
- 用C#制作推箱子小游戏
思路分析: 一.制作一个地图 二.地图中放置墙.箱子.人.目标等 三.让小人动起来完成推箱子动作 游戏制作: 1.按照上述地图制作一个地图 (12行×13列) 地图可以看做是行和列组成的,即可以看做 ...
- 用cocos2d 2.1制作一个过河小游戏(4): 游戏主逻辑BaseLayer设计
前段时间一直在忙.没有时间更新博客.今天还是抽点时间把最后一小部分游戏的实现放上来吧. BaseLayer.h: #import <GameKit/GameKit.h> #import & ...
- Python制作塔防小游戏
开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块.
- 原生JS制作贪吃蛇小游戏
感情都在代码里,来,干了!... <!doctype html> <html> <head> <meta http-equiv="Content-T ...
- android 小游戏 ---- 数独(二)
> 首先创建一个自己的View类 -->继承SurfaceView并实现SurfaceHolder.Callback接口 --> SurfaceView.getHolder ...
- 利用python 5分钟制作一款小游戏
1.安装pygame 在命令行cmd中输入:pip install pygame ( 注:如果安装不成功,需要输入:python -m pip install --user --upgrade pip ...
随机推荐
- 设计模式(十二):bridge模式
刚开始看到这个模式并不是很理解,之后在网上看到别人的博客,才大致抓住了脉络. 何谓抽象和实现分离:就是将一个实际的物件跟它的所具有的功能分离.<大话设计模式>中有对手机品牌和具体的手机应用 ...
- MDK for ARM (keil) 编译后的信息
文章转自http://blog.csdn.net/gasbi/article/details/6186312 当我们使用Keil对我们的代码进行编译之后,下方Build Output窗口会出现:Pro ...
- myeclipse导入项目出现jquery错误(有红叉)
今天导入了一个项目,但是进去之后jquery出现了红叉,如图(事实上在我没调好之前两个jquery文件都有叉号) 怎么调呢?右键jquery文件,选择MyEclipse->Exclude Fro ...
- ASP.NET Core 使用 Redis 和 Protobuf 进行 Session 缓存
前言 上篇博文介绍了怎么样在 asp.net core 中使用中间件,以及如何自定义中间件.项目中刚好也用到了Redis,所以本篇就介绍下怎么样在 asp.net core 中使用 Redis 进行资 ...
- 一步步学习javascript基础篇(4):面向对象设计之创建对象(工厂、原型和构造函数等模式)
前面我们介绍了可以通过Object构造函数或对象字面量都可以用来创建单个对象,但是如果需要创建多个对象的话,显然很多冗余代码. 接下来介绍几种模式来创建对象.不过在此之前,我们还是先来了解下 type ...
- (翻译)《Hands-on Node.js》—— Introduction
今天开始会和大熊君{{bb}}一起着手翻译node的系列外文书籍,大熊负责翻译<Node.js IN ACTION>一书,而我暂时负责翻译这本<Hands-on Node.js> ...
- kpvalidate开辟验证组件,通用Java Web请求服务器端数据验证组件
小菜利用工作之余编写了一款Java小插件,主要是用来验证Web请求的数据,是在服务器端进行验证,不是简单的浏览器端验证. 小菜编写的仅仅是一款非常初级的组件而已,但小菜为它写了详细的说明文档. 简单介 ...
- 几个毫无节操纯属恶搞的JavaScript插件
fartscroll.js,为放屁而生 你知道么,有了这个js库,你的页面就可以——————————放屁勒! 打开下面的演示地址,然后滚动页面. 在线演示:http://theonion.github ...
- 特邀美国EMC实战专家Mark来华授课
“轻松搞定EMC-PCB和系统设计”课程介绍 本次课程特邀美国EMC领域权威专家Mark Montrose主讲,将涵盖满足产品电磁兼容性和信号完整性的基本原理.课程涉及多个领域,不仅仅针对PCB设计, ...
- Gamma函数是如何被发现的?
学过微积分的人,肯定都接触过Euler积分,按教科书上的说法,这是两种含有参变量的定积分,但其实没那么玄乎,它们只是两个函数.其中第一型Euler积分叫\(B\)-函数,第二型Euler积分叫\(\G ...