zoukankan      html  css  js  c++  java
  • [原创]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进行变换,从而跟不变换的那个进行比较。

  • 相关阅读:
    基本技能训练之线程
    关于UEditor的使用配置(图片上传配置)
    PAT 乙级练习题1002. 写出这个数 (20)
    codeforces 682C Alyona and the Tree DFS
    codeforces 681D Gifts by the List dfs+构造
    codeforces 678E Another Sith Tournament 概率dp
    codeforces 680E Bear and Square Grid 巧妙暴力
    codeforces 678D Iterated Linear Function 矩阵快速幂
    codeforces 679A Bear and Prime 100 交互
    XTUOJ 1248 TC or CF 搜索
  • 原文地址:https://www.cnblogs.com/iloveas/p/3887198.html
Copyright © 2011-2022 走看看