2019独角兽企业重金招聘Python工程师标准>>>

写了好久没写出来,网上找到了,谢谢作者

原文:http://hi.baidu.com/sl19880127sl/blog/item/4e37f48fcfbac9e2f11f3680.html

AS3减速运动在做游戏开发时很重要,今天我们就介绍一种标准的AS3减速运动,其实就是高中物理知识。废话少说,先看效果:

下面我们就介绍使用flashdevelop来做这个程序,打开flashdevelop,新建一个as3项目(工程->新建工程->AS3 Project),然后在生成的Main.as中输入以下代码:

package 
{
    import flash.display.Sprite;
    import flash.events.Event;
    
    /**
    * ...
    * @author Jaja as-max.cn
    */
    public class Main extends Sprite 
    {
        
        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }
        
        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // entry point
            
            for (var i:int = 0; i < 5; i++) {
                var ball:Ball = new Ball;
                ball.start(int(Math.random() * 60), int(Math.random() * 60));
                addChild(ball);
            }
        }
        
    }
    
}

这里我们需要一个Ball类,在Main.as同目录下新建一个Ball.as文件,在其中输入以下代码:

package 
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    
    /**
    * ...
    * @author Jaja as-max.cn
    */
    public class Ball extends Sprite
    {
        /**
        * 开始拖动时的小球x坐标
        */
        private var dragStartX:int = 0;
        
        /**
        * 开始拖动时的小球y坐标
        */
        private var dragStartY:int = 0;
        
        /**
        * 开始拖动时的鼠标x坐标
        */
        private var dragStartMouseX:int = 0;
        
        /**
        * 开始拖动时的鼠标y坐标
        */
        private var dragStartMouseY:int = 0;
        
        /**
        * 上一帧小球x坐标
        */
        private var lastX:Number = 0;
        
        /**
        * 上一帧小球y坐标
        */
        private var lastY:Number = 0;
        
        /**
        * 小球的x轴速度,单位(像素/帧)
        */
        private var speedX:Number = 0;
        
        /**
        * 小球的y轴速度
        */
        private var speedY:Number = 0;
        
        /**
        * 指定当前是否为正在拖动
        */
        private var isDraging:Boolean = false;
        
        /**
        * 小球加速度,单位(像素/帧/帧);
        */
        private var acceleration:Number = 0.2;
        
        public function Ball() :void
        {
            //build ui
            graphics.beginFill(0x999999);
            graphics.lineStyle(2);
            graphics.drawCircle(15, 15, 15);
            
            this.addEventListener(Event.ADDED_TO_STAGE, addThis);
        }
        
        private function addThis(event:Event):void {
            this.addEventListener(Event.REMOVED_FROM_STAGE, removeThis);
            this.addEventListener(MouseEvent.MOUSE_DOWN, downThis);
            stage.addEventListener(MouseEvent.MOUSE_UP, upStage);
        }
        
        private function removeThis(event:Event):void {
            this.removeEventListener(Event.REMOVED_FROM_STAGE, removeThis);
            this.removeEventListener(Event.ADDED_TO_STAGE, addThis);
            this.removeEventListener(MouseEvent.MOUSE_DOWN, downThis);
            stage.removeEventListener(MouseEvent.MOUSE_UP, upStage);
            this.removeEventListener(Event.ENTER_FRAME, enterFrame);
        }
        
        private function downThis(event:MouseEvent):void {
            dragStartX = this.x;
            dragStartY = this.y;
            dragStartMouseX = this.parent.mouseX;
            dragStartMouseY = this.parent.mouseY;
            
            isDraging = true;
            
            start(speedX, speedY);
        }
        
        private function enterFrame(event:Event):void {
            if(isDraging){
                this.x = dragStartX + this.parent.mouseX - dragStartMouseX;
                this.y = dragStartY + this.parent.mouseY - dragStartMouseY;
                
                
                speedX = this.x - lastX;
                speedY = this.y - lastY;
                
                lastX = this.x;
                lastY = this.y;
            }else {
                this.x += speedX;
                this.y += speedY;
                
                if (afterSpeedX == 0 && afterSpeedY == 0) {
                    this.removeEventListener(Event.ENTER_FRAME, enterFrame);
                }
                
                var afterSpeedX:Number = Math.abs(speedX) - acceleration;
                var afterSpeedY:Number = Math.abs(speedY) - acceleration;
                
                
                
                if (afterSpeedX < 0) {
                    afterSpeedX = 0;
                }
                if (afterSpeedY < 0) {
                    afterSpeedY = 0;
                }
                
                speedX = speedX >= 0?afterSpeedX: -afterSpeedX;
                speedY = speedY >= 0?afterSpeedY: -afterSpeedY;
            }
            
            if (this.x < 0) {
                speedX = Math.abs(speedX);
            }
            if (this.x > stage.stageWidth - this.width) {
                speedX = -Math.abs(speedX);
            }
            if (this.y < 0) {
                speedY = Math.abs(speedY);
            }
            if (this.y > stage.stageHeight - this.height) {
                speedY = -Math.abs(speedY);
            }
        }
        
        private function upStage(event:MouseEvent):void {
            isDraging = false;
        }
        
        public function start(speedx:int, speedy:int):void {
            speedX = speedx;
            speedY = speedy;
            
            if(!this.hasEventListener(Event.ENTER_FRAME)){
                this.addEventListener(Event.ENTER_FRAME, enterFrame);
            }
        }
        
    }
    
}

保存文件,按F5或者Ctrl+Enter调试我们的程序,就可以看到效果了,可以用鼠标拖动小球试试。当然如果你电脑上没有安装flashdevelop,用flash也可以编译这些文件,将flash的场景绑定Main类就可以编译了。

转载于:https://my.oschina.net/ahuaahua/blog/17580

(转)一个as3写的减速效果相关推荐

  1. [html] 写一个类似刮刮卡效果的交互,即鼠标划过时显示号码

    [html] 写一个类似刮刮卡效果的交互,即鼠标划过时显示号码 <title>Document</title> <style> *{ margin:0; paddi ...

  2. [css] 使用css写一个红绿灯交替的动画效果

    [css] 使用css写一个红绿灯交替的动画效果 <!DOCTYPE html> <html lang="en"><head> <meta ...

  3. 教你实现一个朴实的Canvas时钟效果

    摘要:今天教大家写一个canvas的时钟案例,效果可能看起来比较简单,没有那些花里胡哨的. 本文分享自华为云社区<如何实现一个朴实无华的Canvas时钟效果>,作者: 北极光之夜.. 一. ...

  4. linux用户motd,linux需要装?那就和我一起来配置一个动态的MOTD登陆效果吧

    说到motd,熟悉linux系统的同学应该熟悉,motd它是linux系统上的一个普通的文件,在linux系统上的/etc/motd文件 .作用于:每次系统需要登陆时,通过终端展示一些消息给登陆用户. ...

  5. php实现跑马灯闪亮,JavaScript_基于jquery实现的文字向上跑动类似跑马灯的效果,想实现一个类似跑马灯的效果, - phpStudy...

    基于jquery实现的文字向上跑动类似跑马灯的效果 想实现一个类似跑马灯的效果,发现跑马灯有空格.效果也不美观,于是用jquery写了个 页面代码 恭喜187****5204获得1000RBM 恭喜1 ...

  6. 让View具有减速效果的动画——FlingAnimation

    Android动画和Transition系列文章 初识属性动画--使用Animator创建动画 再谈属性动画--介绍以及自定义Interpolator插值器 三谈属性动画--Keyframe以及Vie ...

  7. javascript实现div层移动的减速效果

    其实原理很简单,当一个div层从起始位置到最终终点位置(endX,endY)的过程中,假设每10ms移动一次.那么利用一个目标值(终点坐标)减去当前div层的位置除以一个定长来作为下次div层要移动的 ...

  8. 图片上的文字用CSS写出毛玻璃效果

    图片上的文字用CSS写出毛玻璃效果  2016-10-04 08:11    网页设计   标签:css   1297    发表评论 半透明颜色最初的使用场景之一就是作为背景.将其叠放在照片类或其他 ...

  9. 自己写Shader-翻书效果

    尝试练习翻书效果shader的制作 思路 翻页原理 直翻页: 思路: 代码: 总结: 曲线从一角翻页 思路: 效果 把效果和数学联系起来 角翻页有点复杂,,, 思路 直直的翻页,即将页面旋转180完成 ...

最新文章

  1. Lync server 2013 监控角色的安装
  2. 程序员面试题精选100题(47)-数组中出现次数超过一半的数字[算法]
  3. Android的sqlite使用外部,Android 使用外部已经建立好的sqlite数据库
  4. static变量 java
  5. python内置函数大全,赶紧收藏!!
  6. 金志文机器人歌叫什么_MIR发布《移动机器人部署安全指南》白皮书
  7. Python全栈之路Day16
  8. Oracle 11G R2(11.0.2.4.0) RAC打PSU(11.2.0.4.11.2.0.4.171017)
  9. 计算机主机电源灯不亮,电脑电源指示灯不亮怎么回事
  10. openwrt安装aliddns使用阿里云ddns
  11. 均值、方差、标准差、协方差详解及MATLAB实现
  12. 开源公告|腾讯代码安全指南开源,涉及C/C++、Go等六门编程语言
  13. 【数学】拉格朗日乘子法(Lagrange Multiplier) 和KKT条件理解
  14. php 过滤字符 b,php过滤所有中英文标点符号
  15. 从C快速入门C++ (命名空间、引用、函数重载)
  16. 黑苹果手动修改intel hd3000核显显存大小.2022-11-29
  17. ipad安装linux模拟器下载文件,教你在linux下安装游戏模拟器
  18. IEEE顶级期刊和会议-车辆动力学及其控制和计算机视觉CV
  19. 中国农产品冷链物流行业运营动态及前景发展规划建议报告2021-2027年
  20. openjudge 1.5.45 金币

热门文章

  1. hdf heg 批量拼接_[转载]MODIS Aerosol product/MODIS气溶胶产品
  2. linux停止ftp服务命令,centos没有service命令,怎么启用ftp服务
  3. Linux 命令行小技巧《叹号的用处》
  4. C++ 枚举类型介绍
  5. [C语言] qsort 快速排序函数讲解
  6. poj2029(二维树状数组)
  7. python将二维列表内容写入和读取.csv文件
  8. Educational Codeforces Round 90 (Rated for Div. 2)部分题解
  9. 后缀数组 ---- 2018~2019icpc焦作H题[后缀数组+st表+二分+单调栈]
  10. 流网络的最小割问题c语言,「网络流24题」最小路径覆盖问题