zoukankan      html  css  js  c++  java
  • as3 模拟“抛”的动作

    以一个小球为示例,在鼠标点击的时修改它的加速度值(在短时间内移动的距离),加速度以一个值加速,在遇到边界时进行反向。

    代码参考自:《ActionScript 3.0 动画教程》,添加了拖动时的范围限定<在整个文档内进行拖动>。

    Ball.as

       1: package  
       2: {
       3:     import flash.display.Sprite;
       4:     
       5:     /**
       6:      * ...
       7:      * @author ...
       8:      */
       9:     public class Ball extends Sprite
      10:     {
      11:         public var radius:Number;
      12:         private var color:uint;
      13:         public var vx:Number;
      14:         public var vy:Number;
      15:         
      16:         public function Ball(radius:Number=40, color:uint=0xff0000) 
      17:         {
      18:             this.radius = radius;
      19:             this.color = color;
      20:             
      21:             init();
      22:         }
      23:         
      24:         private function init():void {
      25:             graphics.clear();
      26:             graphics.beginFill(color);
      27:             graphics.drawCircle(0, 0, radius);
      28:             graphics.endFill();
      29:         }
      30:         
      31:     }
      32:     
      33: }

    Throwing.as

       1: package  
       2: {
       3:     import flash.accessibility.Accessibility;
       4:     import flash.display.Sprite;
       5:     import flash.display.Stage;
       6:     import flash.display.StageAlign;
       7:     import flash.display.StageScaleMode;
       8:     import flash.events.Event;
       9:     import flash.events.MouseEvent;
      10:     import flash.geom.Rectangle;
      11:     
      12:     /**
      13:      * ...
      14:      * @author ...
      15:      */
      16:     public class Throwing extends Sprite
      17:     {
      18:         
      19:         private var ball:Ball;
      20:         private var vx:Number;
      21:         private var vy:Number;
      22:         private var bounce:Number = -0.7;
      23:         private var gravity:Number = .5;
      24:         private var oldX:Number;
      25:         private var oldY:Number;
      26:         
      27:         public function Throwing() 
      28:         {
      29:             init();
      30:         }
      31:         
      32:         private function init():void {
      33:             stage.scaleMode = StageScaleMode.NO_SCALE;
      34:             stage.align = StageAlign.TOP_LEFT;
      35:             
      36:             ball = new Ball();
      37:             ball.x = stage.stageWidth / 2;
      38:             ball.y = stage.stageHeight / 2;
      39:             vx = Math.random() * 10 - 5;
      40:             vy = -10;
      41:             
      42:             addChild(ball);
      43:             ball.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
      44:             addEventListener(Event.ENTER_FRAME, onEnterFrame);
      45:         }
      46:         
      47:         private function onMouseDown(evt:MouseEvent):void {
      48:             oldX = ball.x;
      49:             oldY = ball.y;
      50:             
      51:             stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
      52:             
      53:             ball.startDrag(false, new Rectangle(ball.radius, ball.radius,stage.stageWidth - ball.radius*2, stage.stageHeight - ball.radius*2));
      54:             
      55:             removeEventListener(Event.ENTER_FRAME, onEnterFrame);
      56:             addEventListener(Event.ENTER_FRAME, trackVelocity);
      57:         }
      58:         
      59:         private function onMouseUp(evt:MouseEvent):void {
      60:             stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
      61:             ball.stopDrag();
      62:             removeEventListener(Event.ENTER_FRAME, trackVelocity);
      63:             addEventListener(Event.ENTER_FRAME, onEnterFrame);
      64:         }
      65:         
      66:         private function trackVelocity(evt:Event):void {
      67:             vx = ball.x - oldX;
      68:             vy = ball.y - oldY;
      69:             
      70:             oldX = ball.x;
      71:             oldY = ball.y;
      72:         }
      73:         
      74:         private function onEnterFrame(evt:Event):void {
      75:             vx += gravity;
      76:             ball.x += vx;
      77:             ball.y += vy;
      78:             var left:Number = 0;
      79:             var right:Number = stage.stageWidth;
      80:             var top:Number = 0;
      81:             var bottom:Number = stage.stageHeight;
      82:             
      83:             if (ball.x + ball.radius > right) {
      84:                 ball.x = right - ball.radius;
      85:                 vx *= bounce;
      86:             } else if (ball.x - ball.radius < left) {
      87:                 ball.x = left + ball.radius;
      88:                 vx *= bounce;
      89:             }
      90:             
      91:             if (ball.y + ball.radius > bottom) {
      92:                 ball.y = bottom - ball.radius;
      93:                 vy *= bounce;
      94:             } else if (ball.y - ball.radius < top) {
      95:                 ball.y = top + ball.radius;
      96:                 vy *= bounce;
      97:             }
      98:             
      99:         }
     100:         
     101:     }
     102:     
     103: }
  • 相关阅读:
    常用集合比较
    windows和centos下安装ActiveMQ
    windows + maven + eclipse
    Eclipse常用插件 + Eclipse快捷键
    Zookeeper + Dubbo + SpringMVC + dubbo-admin
    Hession集成Spring + maven依赖通讯comm项目 + 解决@ResponseBody中文乱码
    Spring结合log4j(slf4j)
    nginx安装配置+集群tomcat:Centos和windows环境
    Manthan, Codefest 18 (rated, Div. 1 + Div. 2) ABCDE
    51nod 1483 化学变化
  • 原文地址:https://www.cnblogs.com/meteoric_cry/p/1985499.html
Copyright © 2011-2022 走看看