中国教程网论坛's Archiver

sanbos 发表于 2008-6-1 00:26

拖放与碰撞检测练习[原创][本文已收录教程库]

拖动和碰撞侦测练习
如下图:用鼠标将小狗拖到小车的座位上,小狗就会将车开走。
[swf]http://bbs.jcwcn.com/attachments/month_0806/20080601_1f3f3daf0e6fab4b1101bKl5IWnKC6kv.swf[/swf]
这是一个基础的拖放和碰撞检测的练习,现在我们就来做这个练习。首先新建一个影片剪辑元件,画一只小狗,如图:
[attach]841413[/attach]
你也可以就用我后面提供的素材,不过记住,导入后将小狗扣出来,即去掉背影。
然后再新建一个元件,画一个小车,同理如果用我提供的素材,需要将小车扣出,即去掉背影。
[attach]841414[/attach]
下面建第三个影片剪辑元件,画一个小狗开车的图。
[attach]841415[/attach]
现在回到主场影,按下图绘制舞台:
新建图层,将小狗元件和小车元件从库中拖出,按下图摆放:
[attach]841416[/attach]
小狗元件在属性面板中命名为dog_mc,小车元件命名为car_mc.
新建一图层,在小车的座位处画一无笔触,仍一填充色的图形,形状跟小车座位差不多,实际就是画一图形将小车座位遮住,一会用于检测碰撞,就是说当小狗触碰到这个图形后,小狗就坐进车内,将车开走。画好后中,将图形转换为影片剪辑,在属性面板中将其命名为pz_mc,并将其透明度设为0.
[attach]841417[/attach]
下面,再新建一图层,在第2帧插入关键帧,从库中将小狗开车的元件拖入,放在上一层中小车相同位置,差不多就行,不一定精确。然后在第80帧插入关键帧,将开车的图片拖到舞台右侧之外,
[attach]841418[/attach]
在第2帧-第80帧之间建立补间动画。然后在第81帧插入关键帧,将开车图片拖到舞台左侧之外,
[attach]841419[/attach]
在100帧插入关键帧,将开车图片拖到第2帧的位置。
[attach]841420[/attach]
在81帧和100帧间建立补间动画。
 接下来,我们来写代码,新建一图层,取名为action,打开行为面板。
因为本动画要用户来操作才能动,所以我们要让动画停在第1帧,等候用户的操作。所以在第1行输入:
stop();
接下来,就是要让小狗能被拖动,当我们在小狗上面按下鼠标时,小狗将能被拖动。所以接下来的代码是:
dog_mc.onPress = function() { // 当在元件dog_mc上按下鼠标时
dog_mc.startDrag(); //元件dog_mc开始拖动
}
dog_mc.onRelease = function(){ //当在元件dog_mc上放开鼠标时
dog_mc.stopDrag(); //元件dog_mc停止拖动
hit = dog_mc.hitTest(pz_mc);//hitTest是碰撞检测语句,判断两个对象是否碰撞(交叉,重叠)。如果的碰撞则返回true.这一句就是检测小狗dog_mc与我们画在小车座位那里的图形pz_mc是否发生了碰撞,也就起到了判断小狗是否被拉到了座位的作用。
if (hit) {//如果发生了碰撞,即小狗被拖到了座位上。
  gotoAndPlay(2);主时间轴从第2帧开始播放,即小狗将车开走。
}
}
附完整代码,要直接复制代码的话,请复制下面的代码:
stop();
dog_mc.onPress = function() {
        dog_mc.startDrag();
}
dog_mc.onRelease = function(){
        dog_mc.stopDrag();
        hit = dog_mc.hitTest(pz_mc);
        if (hit) {
                gotoAndPlay(2);
        }
}

[[i] 本帖最后由 zctmh0336 于 2009-2-13 08:36 编辑 [/i]]

清风掠影 发表于 2008-6-2 10:32

jc:nomoney 偷懒是不行滴,还是要自己打代码~

[swf]http://bbs.jcwcn.com/attachments/month_0806/20080602_886e5a2b8c69ce678671TvkTMUKamjFI.swf[/swf]

[[i] 本帖最后由 zctmh0336 于 2009-2-13 08:36 编辑 [/i]]

talentmu 发表于 2008-6-3 20:54

交作业,时间比较忙做得不怎么好.请多多指教.3Q
PS:如果不是自己打代码,代码会出错,哈哈
[swf]http://bbs.jcwcn.com/attachments/month_0806/20080603_f6318c8d2d61387a3510VhXOQmKD2WDW.swf[/swf]

[[i] 本帖最后由 zctmh0336 于 2009-2-13 08:37 编辑 [/i]]

清风掠影 发表于 2008-6-3 20:58

看一下楼上的作业~

[swf]http://bbs.jcwcn.com/attachments/month_0806/20080603_f6318c8d2d61387a3510VhXOQmKD2WDW.swf[/swf]

[[i] 本帖最后由 zctmh0336 于 2009-2-13 08:38 编辑 [/i]]

talentmu 发表于 2008-6-3 21:12

哇,一上传就有人批改作业,真幸福,3Q
发现问题:就是那个教程老师说的一句话:"新建一图层,在小车的座位处画一无笔触,仍一填充色的图形,形状跟小车座位差不多,实际就是画一图形将小车座位遮住,一会用于检测碰撞,就是说当小狗触碰到这个图形后,小狗就坐进车内,将车开走。"
我发现我测试影片的时候,我画那个检测碰撞图形再大,或者调整再大,也没有增加其检测的范围,它好像只是检测某一点或者是某条垂直竖线并不是一个范围检测诶,并不是所谓的交集就会触发,然后我又拿两位老师做得继续测试,发现也是这样.有待老师说明.3Q
ps:我小白,但我喜欢实事求是.
[size=4][color=red][/color][/size]
[size=4][color=red]
谢谢楼下的老师解答!3Q。嘿嘿。。。。。[/color][/size]

[[i] 本帖最后由 清风掠影 于 2008-6-5 20:04 编辑 [/i]]

sanbos 发表于 2008-6-4 09:09

回复 5楼 talentmu 的帖子

首先感谢你发现的问题,hitTest语法说明应该是要出现交集才会触发,但经我试你所说问题确实存在,什么原因我还没弄明白。不过我可以先把问题解决了.
将这句:hit = dog_mc.hitTest(pz_mc._x,pz_mc._y,false);
改为:hit = dog_mc.hitTest(pz_mc);
就行了。

[[i] 本帖最后由 sanbos 于 2008-6-4 09:11 编辑 [/i]]

bld2007 发表于 2008-6-5 19:52

[font=楷体_GB2312][size=2]交作业。[/size][/font]

[swf]http://bbs.jcwcn.com/attachments/month_0806/20080605_86c466a43b5b323247b65jTJXK1lovVL.swf[/swf]

[[i] 本帖最后由 zctmh0336 于 2009-2-13 08:39 编辑 [/i]]

zctmh0336 发表于 2008-6-6 14:19

支持练习,交作业了。
[swf]http://bbs.jcwcn.com/attachments/month_0806/20080606_12b555924dcd0b459befA1QrorBYsPuU.swf[/swf]

[[i] 本帖最后由 zctmh0336 于 2009-2-13 08:39 编辑 [/i]]

plthm 发表于 2008-6-12 00:18

交作业了,我换了一个主题

我的文件大了点,我分了两个文件.我做了两个虫子,不足的是这个虫子只能一次跑一只,等它回来后才能去试第二只
[swf]http://bbs.jcwcn.com/attachments/month_0806/20080612_509b3667dbfbbae029002iV44RfjnNiv.swf[/swf]

[[i] 本帖最后由 zctmh0336 于 2009-2-13 08:40 编辑 [/i]]

plthm 发表于 2008-6-12 00:19

我把背景图片大小调整了,现在可以发上去了,但是这个作业有缺陷,不能让两个虫子同时跑啊

[[i] 本帖最后由 plthm 于 2008-6-12 00:29 编辑 [/i]]

sanbos 发表于 2008-6-12 11:33

回复 10楼 plthm 的帖子

不知道,你是怎么做的。让两个虫同时跑,可将两个虫分别做成影片剪辑,如mc1,mc2,在第一帧加上stop();当碰撞发生时,执行:
mc1.play;
mc2.play;
就行了。

希望2008 发表于 2008-9-16 10:47

拖放与碰撞作业

作业
[swf]http://bbs.jcwcn.com/attachments/month_0809/20080916_b9d0018f68eaef5c5bfaAlysbcI1yeyi.swf[/swf]

[[i] 本帖最后由 zctmh0336 于 2009-2-13 08:42 编辑 [/i]]

sanbos 发表于 2008-9-16 13:21

12楼的:

[swf]http://bbs.jcwcn.com/attachments/month_0809/20080916_b9d0018f68eaef5c5bfaAlysbcI1yeyi.swf[/swf]

[[i] 本帖最后由 zctmh0336 于 2009-2-13 08:42 编辑 [/i]]

zhaoruiyang 发表于 2008-9-21 22:32

交作业

交作了

sanbos 发表于 2008-9-21 23:35

14楼的:

[swf]http://bbs.jcwcn.com/attachments/month_0809/20080921_211a01a3b227f2e8b557OWnoxocSx7xq.swf[/swf]

[[i] 本帖最后由 zctmh0336 于 2009-2-13 08:43 编辑 [/i]]

舒顏 发表于 2008-10-15 00:09

我只会照着老师写的作,知道是什么意思,可是不看着教程写代码的时候就老出错jc:sweat jc:yun
[swf]http://bbs.jcwcn.com/attachments/month_0810/20081015_049d2e1cfedf40397a39uHdGFAHMKfgQ.swf[/swf]

[[i] 本帖最后由 zctmh0336 于 2009-2-13 08:34 编辑 [/i]]

lqlee 发表于 2008-10-27 18:29

请问在flash中怎么把图扣出来

gaoqi654321 发表于 2008-10-31 13:40

交作业。

sanbos 发表于 2008-10-31 13:54

18楼的

[swf]http://bbs.jcwcn.com/attachments/month_0810/20081031_42f0e974ca362831a299ZBX1W8ehvyQB.swf[/swf]

[[i] 本帖最后由 zctmh0336 于 2009-2-13 08:34 编辑 [/i]]

lidongmei 发表于 2009-2-13 00:36

交作业吧,不会写代码只会复制哈以后多多学习

还算完成了哈

[[i] 本帖最后由 zctmh0336 于 2009-2-13 08:31 编辑 [/i]]

zctmh0336 发表于 2009-2-13 08:32

20楼朋友的作业
[swf]http://bbs.jcwcn.com/attachments/month_0902/20090213_1f67deaafc91d1981dfey794qtb7eg8E.swf[/swf]

nihl009 发表于 2009-2-24 13:41

想请教一下:我做出来的怎么松手以后不能跳转到第二桢需要按回车才可以跳转

sanbos 发表于 2009-2-26 14:30

回复 22楼 nihl009 的帖子

看看原文件才知道问题在哪啊。

nihl009 发表于 2009-2-26 20:25

[quote]原帖由 [i]sanbos[/i] 于 2009-2-26 14:30 发表 [url=http://bbs.jcwcn.com/redirect.php?goto=findpost&pid=5096344&ptid=185135][img]http://bbs.jcwcn.com/images/common/back.gif[/img][/url]
看看原文件才知道问题在哪啊。 [/quote]
谢谢我已经找到原因了.
顺便交个简单点的作业,
虽然丑了点但原理一样
[swf]http://bbs.jcwcn.com/attachments/month_0902/20090226_b73e21badc8f11440610qUQipyExNLMM.swf[/swf]

[[i] 本帖最后由 zctmh0336 于 2009-2-26 22:22 编辑 [/i]]

zbmcyc 发表于 2009-5-6 16:13

修改后:[attach]1128843[/attach]

zctmh0336 发表于 2009-5-6 23:32

[i=s] 本帖最后由 zctmh0336 于 2009-5-6 23:34 编辑 [/i]

25楼朋友的作业
[swf]http://bbs.jcwcn.com/attachments/month_0905/0905061613782a3a2aafde8261.swf[/swf]

好志 发表于 2009-6-12 21:59

交作业

sanbos 发表于 2009-6-12 22:01

27楼的作业:
[swf]http://bbs.jcwcn.com/attachments/month_0906/090612215949c73badf10fb7ce.swf[/swf]

guadaer 发表于 2009-11-4 18:44

[i=s] 本帖最后由 guadaer 于 2009-11-5 16:35 编辑 [/i]

老师请帮帮忙,我想让一个球去撞击另外两个物体,这两个物体同时被撞开。但总是没有反应,请老师帮我看看,是哪里的问题!谢谢先!!
代码:
stop();
mq_mc.onPress = function() {
        mq_mc.startDrag();
};
mq_mc.onRelease = function() {
        mq_mc.stopDrag();
        hit = mq_mc.hitTest(pz_mc);
        if (hit1) {
                mc1.play;
                mc2.play;
        }
};


[attach]1253740[/attach][attach]1253739[/attach]

guadaer 发表于 2009-11-9 12:15

为什么老师不回答我,是不是我的问题太简单了,不值得回答,菜鸟等待你的指点!!

页: [1] 2

Powered by Discuz! Archiver 7.0.0  © 2001-2009 Comsenz Inc.