第四章 渲染技术
――常识:API 是什么,它是应用程序接口(Application Programming Interface)的缩写。总的来说,API 是指在程序中使用的一些属性和方法来访问某些相关的行为和属性。
FLASH的色彩知识:
将十六进制转换为十进制:trace(0xAC05A2);
将十进制转换为十六进制要用到 toString(16)函数,如:
trace((11273634).toString(16));使用这个数,要加上0x。
色彩值永远都是正数,并有可能超出 int 的值域范围,所以要使用 uint 来存储它们。
色彩合成
如何将红、绿、蓝三种颜色值组成一个有效的颜色值,这是个普遍的问题。
假设有三个变量 red,green,blue,每个变量里面保存一个 0 到 255 之间的数。
下面是这个公式:
color24 = red << 16 | green << 8 | blue;
加入透明度后,建立一个32位色彩值,公式如下:
color32 = alpha << 24 | red << 16 | green << 8 | blue;
位操作符是 << ,是一个按位左移操作符
比如,红色值(red)为 0xFF 或 255,可以由二进制表示为:
11111111
将它向左移动 16 位,结果是:
111111110000000000000000
绿色值(green)为 0x55(十进制 85)
蓝色值为 0xF3(十进制 243)
这样我们总共就拥有了三组数:
111111110000000000000000
000000000101010100000000
000000000000000011110011
使用或(OR)运算,符号是 | 。它会将两组数的每个二进制位进行比较,如果两个之中有一个数为1,那么结果就为 1,如果两个数都为 0,那么结果就为 0。
重要:::
var color24:Number = 0xFF << 16 | 0x55 << 8 | 0xF3; 或者:
var color24:Number = 255 << 16 | 85 << 8 | 243;
(使用二进制操作是 ActionScript 中最快的运算,因为它们属于低级运算。)
获取颜色值
假如有这样一个数 0xFF55F3,要从中提取 red, green, blue 的值。
red = color24 >> 16;
green = color24 >> 8 & 0xFF;
blue = color24 & 0xFF;
& (And)操作符
如果两个都是1那么结果就为 1,如果其中有一个为 0,那么结果就为 0。
绘图对象
直接访问绘图方法,我们可以这样写: mySprite.graphics.lineTo(100, 100);
使用 clear 删除绘制
这个命令中对其它 graphics 绘制的图像不起作用。。。。这个是什么意思。我要验证――
大概写了一个画线
package {
import flash.display.Sprite;
import flash.events.*;
import flash.utils.Timer
public class DrawingApp extends Sprite {
var button:Sprite=new Sprite()
var b:Number
var c:Number
public function DrawingApp() {
init();
button.buttonMode=true
button.graphics.beginFill(0x000000)
button.graphics.drawCircle(0,0,20)
button.graphics.endFill()
addChild(button)
//graphics.lineStyle(line(1))
graphics.lineStyle(1)
}
/*private function line(a:Number){
}*/
private function onclick(e:MouseEvent):void{
graphics.clear()
//graphics.lineStyle(line(1))
graphics.lineStyle(1)
}
private function init(){
stage.addEventListener(MouseEvent.MOUSE_DOWN,ondown)
stage.addEventListener(MouseEvent.MOUSE_UP,onup)
}
private function ondown(e:MouseEvent):void{
graphics.moveTo(mouseX,mouseY)
stage.addEventListener(MouseEvent.MOUSE_MOVE,onmove)
}
private function onup(e:MouseEvent):void{
stage.removeEventListener(MouseEvent.MOUSE_MOVE,onmove)
button.addEventListener(MouseEvent.CLICK,onclick)
}
private function onmove(e:MouseEvent):void{
graphics.lineTo(mouseX,mouseY)
}
}
}
其中 private function line(a:Number){
}
做为一个扩展
希望以后可以写成随鼠标按下时间,越长则a值越大
使用 curveTo 绘制曲线
curveTo(x1, y1, x2, y2),
起点:上一次画线的终点/ moveTo 命令指定画笔的起点/第一次画线默认的起点为0,0。
curveTo 函数中包括两个点。
第一个是控制点影响曲线的形状,
另一个是曲线的终点。
x1 = xt * 2 – (x0 + x2) / 2;
y1 = yt * 2 – (y0 + y2) / 2;
(xt,yt是控制点的实际位置,即mouseX,mouseY)
没有评论:
发表评论