×

关注微信公众号

免备案网站空间虚拟主机双线空间域名查询PS数码后期
photoshop互助课堂数百G视频教程下载英语培训机构初中英语如何学随时随地聆听大师开讲/课堂
酷素材!视频教程打包下手绘教程抠图教程路径专辑photoshop cs3视频教程
查看: 5473|回复: 18

[AS] Ball类(2)

[复制链接]
发表于 2010-9-25 09:51:32 | 显示全部楼层 |阅读模式
本帖最后由 sanbos 于 2010-9-26 11:54 编辑

在FLASH CS3中加入了一个文档类(document class)的概念,使用文档类后,我们写在帧上面的代码就不用了,直接写在文档类里面,文档类

就相当于第一帧的位置,这样我们就不用在FLA文件里写代码了,所有代码都写在AS文件里,达到了界面和代码的分离。

文档类(即主类):
  1. package
  2. {

  3.         import flash.display.Sprite;
  4.         import flash.display.Shape;
  5.         import flash.geom.Rectangle;

  6.         [SWF(backgroundColor = "#EEEEEE",width = "550",height = "400",frameRate = "30")]

  7.         public class Main extends Sprite
  8.         {
  9.                 private static var radius:uint = 80;

  10.                 public function Main()
  11.                 {
  12.                         init();
  13.                 }

  14.                 private function init():void
  15.                 {
  16.                         var ball:Ball = new Ball(radius,0x3366CC);
  17.                         addChild(ball);
  18.                         ball.x = stage.stageWidth / 2;
  19.                         ball.y = stage.stageHeight / 2;
  20.                 }

  21.         }

  22. }
复制代码
我们发现刚才第一帧的代码搬到这个类里面来了,那个FLA文件第一帧的代码就可以全部删除掉了。最后在FLA的属性栏中找到文档类,在后面输入类的名字Main。现在发布看一下,是不是跟代码写在帧上的效果一样。

一个球看起来比较单调,让我们来修改文档类,实现多球排列的效果。

文档类:
  1. package
  2. {

  3.         import flash.display.Sprite;
  4.         import flash.display.Shape;
  5.         import flash.geom.Rectangle;

  6.         [SWF(backgroundColor = "#EEEEEE",width = "465",height = "465",frameRate = "30")]

  7.         public class Main extends Sprite
  8.         {
  9.                 private static var max:uint = 6;
  10.                 private static var radius:uint = 60;
  11.                 private static var colors:Array;
  12.                 private static var positions:Array;

  13.                 public function Main()
  14.                 {
  15.                         colors = new Array  ;
  16.                         colors.push(0x3366CC);
  17.                         colors.push(0x000000);
  18.                         colors.push(0xFFFFFF);
  19.                         colors.push(0x339900);
  20.                         colors.push(0xFF9900);
  21.                         colors.push(0xFF0066);
  22.                         positions = new Array  ;
  23.                         positions.push({x:232,y:162});
  24.                         positions.push({x:157,y:232});
  25.                         positions.push({x:307,y:232});
  26.                         positions.push({x:82,y:302});
  27.                         positions.push({x:232,y:302});
  28.                         positions.push({x:382,y:302});
  29.                         init();
  30.                 }

  31.                 private function init():void
  32.                 {
  33.                         for (var n:uint = 0; n < max; n++)
  34.                         {
  35.                                 var ball:Ball = new Ball(radius,colors[n]);
  36.                                 addChild(ball);
  37.                                 ball.x = positions[n].x;
  38.                                 ball.y = positions[n].y;
  39.                         }
  40.                 }

  41.         }

  42. }
复制代码

这里实现了6个球6种颜色三角形排列的效果,看起来好多了吧。今天就到这了,明天实现球的移动效果。
如有什么问题请回帖,我会尽量解答。

球直线排列,加入按钮和移动。
文档类:
  1. package {

  2.     import flash.display.Sprite;
  3.     import flash.display.Shape;
  4.     import flash.geom.Rectangle;
  5.     import flash.events.Event;
  6.     import flash.events.MouseEvent;
  7.    
  8.     [SWF(backgroundColor="#FFFFFF", width="465", height="465", frameRate="30")]

  9.     public class Main2 extends Sprite {
  10.         //
  11.         private var ball0:Ball;
  12.         private var ball1:Ball;
  13.         private var ball2:Ball;
  14.         private var ball3:Ball;
  15.         private var ball4:Ball;
  16.         private var ball5:Ball;
  17.         //private var angle:Number = 0;
  18.         private static var radian:Number = Math.PI/180;
  19.                
  20.         private var playBtn:Btn;
  21.         private var stopBtn:Btn;
  22.       
  23.         public function Main2() {
  24.             init();
  25.         }

  26.         private function init():void {
  27.                        
  28.             graphics.beginFill(0xEEEEEE);
  29.             graphics.drawRect(0, 140, 465, 325);
  30.             graphics.endFill();
  31.            
  32.             ball0 = new Ball(20, 0x666666);
  33.             addChild(ball0);
  34.             ball0.x = 232;
  35.             ball0.y = 140;
  36.             ball1 = new Ball(25, 0xFF0066);
  37.             addChild(ball1);
  38.             ball1.x = 232;
  39.             ball1.y = 170;
  40.             ball2 = new Ball(30, 0xFF9900);
  41.             addChild(ball2);
  42.             ball2.x = 232;
  43.             ball2.y = 206;
  44.             ball3 = new Ball(35, 0x339900);
  45.             addChild(ball3);
  46.             ball3.x = 232;
  47.             ball3.y = 248;
  48.             ball4 = new Ball(40, 0x3366CC);
  49.             addChild(ball4);
  50.             ball4.x = 232;
  51.             ball4.y = 296;
  52.             ball5 = new Ball(45, 0xFFFFFF);
  53.             addChild(ball5);
  54.             ball5.x = 232;
  55.             ball5.y = 350;
  56.             //生成按钮,加入到舞台,按钮的位置,为按钮注册事件
  57.             playBtn = new Btn();
  58.             addChild(playBtn);
  59.             playBtn.x = 192;
  60.             playBtn.y = 440;
  61.             playBtn.init({label: "play"});
  62.             playBtn.addEventListener(MouseEvent.CLICK, play, false, 0, true);
  63.             stopBtn = new Btn();
  64.             addChild(stopBtn);
  65.             stopBtn.x = 272;
  66.             stopBtn.y = 440;
  67.             stopBtn.init({label: "stop"});
  68.             stopBtn.addEventListener(MouseEvent.CLICK, stop, false, 0, true);
  69.             stopBtn.enabled = false;
  70.         }
  71.         private function play(evt:MouseEvent):void {
  72.             playBtn.clicked = true;
  73.             stopBtn.enabled = true;
  74.             addEventListener(Event.ENTER_FRAME, update, false, 0, true);
  75.         }
  76.         private function stop(evt:MouseEvent):void {
  77.             playBtn.clicked = false;
  78.             stopBtn.enabled = false;
  79.             removeEventListener(Event.ENTER_FRAME, update);
  80.         }
  81.         private function update(evt:Event):void {
  82.             //angle += 2;
  83.             ball0.angle += 2;
  84.             ball1.angle -= 2;
  85.             ball2.angle += 2;
  86.             ball3.angle -= 2;
  87.             ball4.angle += 2;
  88.             ball5.angle -= 2;
  89.             ball0.x = 232 + 120*Math.sin(ball0.angle*radian);
  90.             ball1.x = 232 + 150*Math.sin(ball1.angle*radian);
  91.             ball2.x = 232 + 180*Math.sin(ball2.angle*radian);
  92.             ball3.x = 232 + 210*Math.sin(ball3.angle*radian);
  93.             ball4.x = 232 + 240*Math.sin(ball4.angle*radian);
  94.             ball5.x = 232 + 270*Math.sin(ball5.angle*radian);
  95.         }

  96.     }

  97. }
复制代码
按钮类:
  1. package
  2. {
  3.         import flash.display.Sprite;
  4.         import flash.display.Shape;
  5.         import flash.text.TextField;
  6.         import flash.text.TextFieldType;
  7.         import flash.text.AntiAliasType;
  8.         import flash.text.TextFormat;
  9.         import flash.text.TextFormatAlign;
  10.         import flash.filters.GlowFilter;
  11.         import flash.events.MouseEvent;

  12.         public class Btn extends Sprite
  13.         {
  14.                 public var id:uint;
  15.                 private var shade:Shape;
  16.                 private var bottom:Shape;
  17.                 private var light:Shape;
  18.                 private var base:Shape;
  19.                 private var txt:TextField;
  20.                 private var label:String = "";
  21.                 private static var fontType:String = "_宋体";
  22.                 private var _width:uint = 60;
  23.                 private static var _height:uint = 20;
  24.                 private static var corner:uint = 5;
  25.                 private var type:uint = 1;
  26.                 private static var bColor:uint = 0xFFFFFF;
  27.                 private static var sColor:uint = 0x000000;
  28.                 private static var upColor:uint = 0x666666;
  29.                 private static var overColor:uint = 0x333333;
  30.                 private static var offColor:uint = 0x999999;
  31.                 private static var gColor:uint = 0x0099FF;
  32.                 private var blueGlow:GlowFilter;
  33.                 private var shadeGlow:GlowFilter;
  34.                 private var _clicked:Boolean = false;
  35.                 private var _enabled:Boolean = true;

  36.                 public function Btn()
  37.                 {
  38.                 }

  39.                 public function init(option:Object):void
  40.                 {
  41.                         if (option.id != undefined)
  42.                         {
  43.                                 id = option.id;
  44.                         }
  45.                         if (option.label != undefined)
  46.                         {
  47.                                 label = option.label;
  48.                         }
  49.                         if (option.width != undefined)
  50.                         {
  51.                                 _width = option.width;
  52.                         }
  53.                         if (option.type != undefined)
  54.                         {
  55.                                 type = option.type;
  56.                         }
  57.                         draw();
  58.                 }
  59.                 private function draw():void
  60.                 {
  61.                         switch (type)
  62.                         {
  63.                                 case 1 :
  64.                                         bColor = 0xFFFFFF;
  65.                                         sColor = 0x000000;
  66.                                         upColor = 0x666666;
  67.                                         overColor = 0x333333;
  68.                                         offColor = 0x999999;
  69.                                         break;
  70.                                 case 2 :
  71.                                         bColor = 0x000000;
  72.                                         sColor = 0xFFFFFF;
  73.                                         upColor = 0x666666;
  74.                                         overColor = 0x999999;
  75.                                         offColor = 0x333333;
  76.                                         break;
  77.                         }
  78.                         blueGlow = new GlowFilter(gColor,0.6,5,5,2,3,false,true);
  79.                         shadeGlow = new GlowFilter(sColor,0.3,4,4,2,3,false,true);
  80.                         shade = new Shape  ;
  81.                         bottom = new Shape  ;
  82.                         light = new Shape  ;
  83.                         base = new Shape  ;
  84.                         txt = new TextField  ;
  85.                         addChild(shade);
  86.                         addChild(bottom);
  87.                         addChild(light);
  88.                         addChild(base);
  89.                         addChild(txt);
  90.                         createBase(shade,_width,_height,corner,sColor);
  91.                         shade.filters = [shadeGlow];
  92.                         createBase(bottom,_width,_height,corner,sColor,0.3);
  93.                         createBase(light,_width,_height,corner,gColor);
  94.                         light.filters = [blueGlow];
  95.                         createBase(base,_width,_height,corner,bColor);
  96.                         txt.x = -_width * 0.5;
  97.                         txt.y = -_height * 0.5;
  98.                         txt.width = _width;
  99.                         txt.height = _height - 1;
  100.                         txt.type = TextFieldType.DYNAMIC;
  101.                         txt.selectable = false;
  102.                         //txt.embedFonts = true;
  103.                         //txt.antiAliasType = AntiAliasType.ADVANCED;
  104.                         var tf:TextFormat = new TextFormat  ;
  105.                         tf.font = fontType;
  106.                         tf.size = 12;
  107.                         tf.align = TextFormatAlign.CENTER;
  108.                         txt.defaultTextFormat = tf;
  109.                         txt.text = label;
  110.                         enabled = true;
  111.                         mouseChildren = false;
  112.                 }
  113.                 private function rollOver(evt:MouseEvent):void
  114.                 {
  115.                         _over();
  116.                 }
  117.                 private function rollOut(evt:MouseEvent):void
  118.                 {
  119.                         _up();
  120.                 }
  121.                 private function press(evt:MouseEvent):void
  122.                 {
  123.                         _down();
  124.                 }
  125.                 private function release(evt:MouseEvent):void
  126.                 {
  127.                         _up();
  128.                 }
  129.                 private function click(evt:MouseEvent):void
  130.                 {
  131.                 }
  132.                 private function _up():void
  133.                 {
  134.                         txt.y = -_height * 0.5;
  135.                         txt.textColor = upColor;
  136.                         base.y = -1;
  137.                         light.visible = false;
  138.                         light.y = -1;
  139.                 }
  140.                 private function _over():void
  141.                 {
  142.                         txt.y = -_height * 0.5;
  143.                         txt.textColor = overColor;
  144.                         base.y = -1;
  145.                         light.visible = true;

  146.                         light.y = -1;
  147.                 }
  148.                 private function _down():void
  149.                 {
  150.                         txt.y = -_height * 0.5 + 1;
  151.                         txt.textColor = overColor;
  152.                         base.y = 0;
  153.                         light.visible = true;
  154.                         light.y = 0;
  155.                 }
  156.                 private function _off():void
  157.                 {
  158.                         txt.y = -_height * 0.5 + 1;
  159.                         txt.textColor = offColor;
  160.                         base.y = 0;
  161.                         light.visible = false;
  162.                         light.y = 0;
  163.                 }
  164.                 public function get clicked():Boolean
  165.                 {
  166.                         return _clicked;
  167.                 }
  168.                 public function set clicked(param:Boolean):void
  169.                 {
  170.                         _clicked = param;
  171.                         enabled = !_clicked;
  172.                         if (_clicked)
  173.                         {
  174.                                 _down();
  175.                         }
  176.                         else
  177.                         {
  178.                                 _up();
  179.                         }
  180.                 }
  181.                 public function get enabled():Boolean
  182.                 {
  183.                         return _enabled;
  184.                 }
  185.                 public function set enabled(param:Boolean):void
  186.                 {
  187.                         _enabled = param;
  188.                         buttonMode = _enabled;
  189.                         mouseEnabled = _enabled;
  190.                         useHandCursor = _enabled;
  191.                         if (_enabled)
  192.                         {
  193.                                 _up();
  194.                                 addEventListener(MouseEvent.MOUSE_OVER,rollOver,false,0,true);
  195.                                 addEventListener(MouseEvent.MOUSE_OUT,rollOut,false,0,true);
  196.                                 addEventListener(MouseEvent.MOUSE_DOWN,press,false,0,true);
  197.                                 addEventListener(MouseEvent.MOUSE_UP,release,false,0,true);
  198.                                 addEventListener(MouseEvent.CLICK,click,false,0,true);
  199.                         }
  200.                         else
  201.                         {
  202.                                 _off();
  203.                                 removeEventListener(MouseEvent.MOUSE_OVER,rollOver);
  204.                                 removeEventListener(MouseEvent.MOUSE_OUT,rollOut);
  205.                                 removeEventListener(MouseEvent.MOUSE_DOWN,press);
  206.                                 removeEventListener(MouseEvent.MOUSE_UP,release);
  207.                                 removeEventListener(MouseEvent.CLICK,click);
  208.                         }
  209.                 }
  210.                 private function createBase(target:Shape,w:uint,h:uint,c:uint,color:uint,alpha:Number=1):void
  211.                 {
  212.                         target.graphics.beginFill(color,alpha);
  213.                         target.graphics.drawRoundRect( -w * 0.5, -h * 0.5,w,h,c * 2);
  214.                         target.graphics.endFill();
  215.                 }

  216.         }
  217. }

复制代码
本帖的地址:http://bbs.jcwcn.com/forum.php?mod=viewthread&tid=325438
跟着教程做一遍,做完的图要到这里评论交作业,教程有看不懂的地方,可以在贴子下面评论

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?[立即注册]

x

评分

参与人数 1金币 +8 热心度 +2 收起 理由
sanbos + 8 + 2 多谢教程

查看全部评分

发表于 2010-9-26 09:41:06 | 显示全部楼层
酷素材
本帖最后由 fangge.888 于 2010-9-26 09:42 编辑

练习一下
问一下,只是绘图吗,怎么才有动态效果啊
再就是我要球布满1024-768的画面,要能自动排和随机颜色就好了,要不定位坐标还不累死了哈!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?[立即注册]

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-9-26 14:15:08 | 显示全部楼层
2# fangge.888
排列要用数组,旋转用圆表现不出来,用矩形,随机颜色。可以参考一下。
  1. package {
  2.         import flash.display.Graphics;
  3.         import flash.display.Sprite;
  4.         import flash.events.Event;
  5.         import flash.events.KeyboardEvent;
  6.         import flash.events.MouseEvent;
  7.         import flash.utils.*;
  8.         [SWF(width = "465", height= "465")]
  9.         public class Squares extends Sprite {
  10.                 var Rects:Array = new Array();
  11.                 var TurnD:Array = new Array();
  12.                 var i:int,j:int;
  13.                 public function DrawMatrix():void {
  14.                         var SqColor:int = 0x000000;
  15.                         for ( var y:int = 0 ; y<15 ; y++ ) {
  16.                                 Rects[y] = new Array();
  17.                                 TurnD[y] = new Array();
  18.                                 for ( var x:int = 0 ; x<15 ; x++ ) {
  19.                                         Rects[y][x] = new Sprite();
  20.                                         Rects[y][x].x = x * 31+16;
  21.                                         Rects[y][x].y = y * 31+16;
  22.                                         Rects[y][x].graphics.beginFill(SqColor);
  23.                                         Rects[y][x].graphics.lineStyle(1, SqColor, 0.8, true);
  24.                                         Rects[y][x].graphics.drawRect(-16, -16, 30, 30);
  25.                                         addChild(Rects[y][x]);
  26.                                         SqColor = Math.random() * 0xffffff;
  27.                                         TurnD[y][x] = 5;
  28.                                 }
  29.                         }
  30.                 }
  31.                 public function Rotate(e:Event):void {
  32.                         for ( i=0 ; i<15 ; i++ ) {
  33.                                 for ( j=0 ; j<15 ; j++ ) {
  34.                                         Rects[i][j].rotation += TurnD[i][j];
  35.                                 }
  36.                         }
  37.                 }
  38.                 public function onKeyDown(e:KeyboardEvent):void {
  39.                         switch (e.keyCode) {
  40.                                 case 13:
  41.                                         StopAll();
  42.                                         break;
  43.                                 case 32:
  44.                                         ToggleAll();
  45.                                         break;
  46.                         }
  47.                 }
  48.                 public function ToggleAll():void {
  49.                         for ( i=0 ; i<15 ; i++ ) {
  50.                                 for ( j=0 ; j<15 ; j++) {
  51.                                         TurnD[i][j] *= -1;
  52.                                 }
  53.                         }
  54.                 }
  55.                 public function StopAll():void {
  56.                         for ( i=0 ; i<15 ; i++ ) {
  57.                                 for ( j=0 ; j<15 ; j++) {
  58.                                         if (TurnD[i][j] == 0)
  59.                                                 TurnD[i][j] = 5;
  60.                                         else
  61.                                                 TurnD[i][j] *= 0;
  62.                                 }
  63.                         }
  64.                 }
  65.                 public function ToggleOne(e:MouseEvent):void {
  66.                         var TurnX:int,TurnY:int;
  67.                         TurnX = e.stageX / 31;
  68.                         TurnY = e.stageY / 31;
  69.                         TurnD[TurnY][TurnX] *= -1;
  70.                 }
  71.                 public function Squares():void {
  72.                         DrawMatrix();
  73.                         addEventListener(Event.ENTER_FRAME, Rotate);
  74.                         stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyDown);
  75.                         stage.addEventListener(MouseEvent.CLICK,ToggleOne);
  76.                 }
  77.         }
  78. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?[立即注册]

x
回复 支持 反对

使用道具 举报

发表于 2010-9-28 19:01:15 | 显示全部楼层
作业

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?[立即注册]

x
回复 支持 反对

使用道具 举报

发表于 2010-9-28 19:22:02 | 显示全部楼层
酷素材
作业

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?[立即注册]

x
回复 支持 反对

使用道具 举报

发表于 2010-9-28 19:23:29 | 显示全部楼层
酷素材
作业

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?[立即注册]

x
回复 支持 反对

使用道具 举报

发表于 2010-9-28 19:24:36 | 显示全部楼层
作业

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?[立即注册]

x
回复 支持 反对

使用道具 举报

发表于 2010-12-29 12:09:03 | 显示全部楼层
很好的教程,学习中!
回复 支持 反对

使用道具 举报

发表于 2011-7-13 09:00:34 | 显示全部楼层
感谢楼主,太好的东东了。我们跟着这样的教材学习,进步会很快的。
回复 支持 反对

使用道具 举报

发表于 2011-7-13 15:55:03 | 显示全部楼层
有源码没,Ball是什么类型
回复 支持 反对

使用道具 举报

发表于 2011-7-13 19:59:55 | 显示全部楼层
回复 cgwin 的帖子

楼主的教程有两部分,你可参看(一)之内容,楼主已提供了全部源码。
Ball类是用户自已定义的一个类型,它创建了一个“Ball”类,在AS中可以用这个类创建新的Ball(球)对象实例,进行动画设计。
回复 支持 反对

使用道具 举报

发表于 2011-8-3 13:43:16 | 显示全部楼层
单顶楼主,挨个看过去!
回复 支持 反对

使用道具 举报

发表于 2011-9-14 19:01:46 | 显示全部楼层
学习中,谢谢
回复 支持 反对

使用道具 举报

发表于 2013-5-26 09:13:17 | 显示全部楼层
强烈支持楼主。。。
回复 支持 反对

使用道具 举报

发表于 2018-5-7 22:51:53 | 显示全部楼层
很不错。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | [立即注册]

本版积分规则

2345