• [原创]ActionScript3游戏中的图像编程(连载七)


    总目录:http://www.cnblogs.com/iloveas/p/3879125.html

     

    1.2.1 RGB测试用例的书写

          新建一个ActionScript项目,名为ShapeColorTransformTest,我在里面创建几个不同颜色的小圆,观察它们在应用了colorTransform之后的变化。代码如下:

     1 package{
     2 [SWF(width = "800", height = "600")]
     3  public class ShapeColorTransformTest extends Sprite{
     4   private var _testSprite_src:Sprite; //用于测试的显示对象(变换前)
     5   private var _testSprite_dst:Sprite;  //用于测试的显示对象(变换后)   private var _myColorTransform:ColorTransform;  //颜色转换对象
     6   public function ShapeColorTransformTest(){
     7    init();
     8   }
     9   private function init():void{
    10    _testSprite_src = getTestSprite();            addChild(_testSprite_src);
    11    _testSprite_dst = getTestSprite();   
    12    _testSprite_dst.x = 200;
    13    addChild(_testSprite_dst);
    14    applyTransform();
    15   }
    16   //创建用于测试的显示对象
    17   private function getTestSprite():Sprite{
    18    var _testSprite:Sprite = new Sprite();
    19    var _shape1:Shape = new Shape();  //添加一个黑色的矩形底
    20    _shape1.graphics.beginFill(0x000000);
    21    _shape1.graphics.drawRect(40, 30, 170, 290);
    22    _shape1.graphics.endFill();
    23    _testSprite.addChild(_shape1);
    24    /*依次添加颜色分别为暗蓝,暗红,暗绿和纯白的4个圆*/
    25    _testSprite.addChild(new Circle(50, 0x0000CC, 100, 200, "add"));
    26    _testSprite.addChild(new Circle(50, 0xCC0000, 150, 200, "add"));
    27    _testSprite.addChild(new Circle(50, 0x00CC00, 125, 250, 1,"add"));
    28    _testSprite.addChild(new Circle(50, 0xFFFFFF, 125, 100, 1, add"));
    29    return _testSprite;
    30   }
    31   private function applyTransform():void{
    32    _myColorTransform = _testSprite_dst.transform.colorTransform; //初始化颜色变换对象(从显示对象里获取)
    33    _myColorTransform.redMultiplier = 1.5;
    34    _testSprite_dst.transform.colorTransform = _myColorTransform; //应用到显示对象上(变换后必须重新赋值,否则变换效果不起作用,详情可查阅帮助文档)
    35  }
    36 }

          在后续的章节中,我们会经常使用圆来表示一个点或者创建一个色块。为了便于这一功能的重用,我决定把这个可爱的圆封装成一个Circle类并放到公共类库里(有的书喜欢用Ball来命名这样的类,但我个人认为取名Circle更加合适,因为纯色的圆并没有球的那种立体感):

     1 package com.gemei.display{
     2  public class Circle extends Sprite{
     3  //为节省本书篇幅,我把x,y,alpha, blendMode这些基本属性都封装到Circle类里面了,项目开发中不推荐这么做
     4   public function Circle(radius:Number = 50, color:uint = 0x000000, x:Number = 0, y:Number = 0, alpha:Number = 1, blendMode:String = BlendMode.NORMAL){
     5    super();
     6    this.x = x; this.y = y; this.blendMode = blendMode;
     7    graphics.beginFill(color, alpha);
     8    graphics.drawCircle(0, 0, radius);
     9    graphics.endFill(); 
    10   }
    11   }
    12 }

          代码创建了两个外观一模一样的显示对象,然后添加到舞台上显示(使用BlendMode只是为了方便创建多个色块,后续章节将会详细介绍它),其中一个将会使用ColorTransform进行变换,从而跟不变换的那个进行比较。

  • 相关阅读:
    git常用命令
    Laravel框架数据库CURD操作、连贯操作总结
    Laravel 5 系列入门教程(四)【最适合中国人的 Laravel 教程】【完结】
    Laravel 5 系列入门教程(三)【最适合中国人的 Laravel 教程】
    Laravel 5 系列入门教程(二)【最适合中国人的 Laravel 教程】
    Laravel 5 系列入门教程(一)【最适合中国人的 Laravel 教程】
    linux环境下安装nginx步骤
    关于C++中的虚拟继承的一些总结
    C++中拷贝构造函数
    C++之类与对象(3)
  • 原文地址:https://www.cnblogs.com/iloveas/p/3887198.html
Copyright © 2020-2023  润新知