佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 2059|回复: 9

[转贴]弹簧效果

[复制链接]
发表于 3-2-2005 09:43 PM | 显示全部楼层 |阅读模式
作者:Super-Tomato


上次转贴了一些物理的公式,在这里就应用一下作了个小球弹簧的效果,希望让大家有点启发

效果:
Flash: http://www.flash8.net/bbs/UploadFile/2005-1/2005127192823279.swf

步骤1:
在场景上画个圆,然后选择圆按F8,转换成Movieclip。注册点(Register point)选择中间

步骤2:
在圆形movieclip属性面板上加上instance name为ball

步骤3:
在场景第一个frame输入以下代码

//在2004版本需要先定义变量,当中包括了球的半径,摩擦力,重力,弹簧力,弹簧床的宽度高度等
width = ball._width/2+1;
v = 0;
grav = 2;
damp = 0.98;
k = 0.2;
left = 0;
right = 400;
top = 200;
bottom = 350;
out = false;

//当球按下时可拖动范围和out变量为false阻止球体计算球体下坠
ball.onPress = function() {
        out = true;
        startDrag(this, true, left+width, 0+width, right-width, bottom-width);
};

//当球放开的时候停止拖动动作和开始计算球体下坠的动作
ball.onRelease = function() {
        out = false;
        v = 0;
        this.stopDrag();
};

//画出球体压着弹簧床时的图形
MovieClip.prototype.drawline = function(x, y) {
        x1 = x-_root.width;
        x2 = x+_root.width;
        with (this._parent) {
                clear();
                beginFill(0x123456);
                lineStyle(1);
                moveTo(left, top);
                curveTo(x1, top, x1, y);
                lineTo(x2, y);
                curveTo(x2, top, right, top);
                lineTo(right, 350);
                lineTo(left, 350);
                lineTo(left, top);
                endFill();
        }
        updateAfterEvent();
};

//球体离开弹簧床的时候还原床形
MovieClip.prototype.drawline_0 = function() {
        with (this._parent) {
                clear();
                beginFill(0x123456);
                lineStyle(1);
                moveTo(left, top);
                lineTo(right, top);
                lineTo(right, 350);
                lineTo(left, 350);
                lineTo(left, top);
        }
        updateAfterEvent();
};

//定义两个空mc以画出弹簧床
_root.createEmptyMovieClip("line", 0);
_root.createEmptyMovieClip("line1", 1);

//当flash开始播放时的事件
_root.onEnterFrame = function() {
        if (!out) {  //当滑鼠没有拖动球体的时候,计算出球体下坠的位置(包括地心吸力)
                v += grav;
                v *= damp;
                ball._y += v;
        }
        if (ball._y>top) {  //当球的位置在弹簧床上的时候
                v += (ball._y-top)*-1*k;
                line.drawline(ball._x, ball._y);
        } else {  //当球的位置离开弹簧床的时候
                line1.drawline_0();
        }
};



当你熟悉了这些编写方法和物力计算之后,就可以加上角度的效果

Flash: http://www.flash8.net/bbs/UploadFile/2005-2/200521162326214.swf


[ Last edited by hahabin on 11-2-2005 at 02:29 AM ]
回复

使用道具 举报


ADVERTISEMENT

发表于 11-2-2005 12:29 AM | 显示全部楼层
谢谢你教我这一个新的script
可是你没有告诉角度的效果
的as
回复

使用道具 举报

 楼主| 发表于 11-2-2005 08:26 AM | 显示全部楼层
我没加上角度的代码,主要是让新手能够简洁的看懂代码。当你能够掌握好以上代码之后就知道怎么使用Math.cos,atan2和物力公式代入。如果你觉得有必要的话,我有空才贴上角度计算的代码吧
回复

使用道具 举报

bhappy 该用户已被删除
发表于 11-2-2005 04:06 PM | 显示全部楼层
谢谢分享。。。。
回复

使用道具 举报

victor_lwy 该用户已被删除
发表于 18-2-2005 09:56 PM | 显示全部楼层
颜色是怎样换的 sorry 我有点笨
回复

使用道具 举报

 楼主| 发表于 19-2-2005 08:54 AM | 显示全部楼层
0x123456 看到这类的都是颜色
回复

使用道具 举报

Follow Us
发表于 2-8-2006 07:23 AM | 显示全部楼层
我的没有反应
为什么???
回复

使用道具 举报

 楼主| 发表于 2-8-2006 07:50 AM | 显示全部楼层
自己看看是否把代碼帖錯地方或步驟沒做好
回复

使用道具 举报


ADVERTISEMENT

发表于 2-8-2006 09:42 AM | 显示全部楼层
原帖由 super-tomato 于 2-8-2006 07:50 AM 发表
自己看看是否把代碼帖錯地方或步驟沒做好

是场景的第一个frame对吗?
我是copy n paste的
ctrl enter的时候也没有出现error
回复

使用道具 举报

 楼主| 发表于 2-8-2006 07:23 PM | 显示全部楼层
原帖由 venus_huihui 于 2-8-2006 09:42 AM 发表

是场景的第一个frame对吗?
我是copy n paste的
ctrl enter的时候也没有出现error


上傳你的文件
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 23-5-2024 04:36 PM , Processed in 0.067317 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表