ll_koba_llさんがコメントをくれたので、試してみた。4KBになりました。ただ、やっぱりBitmapそのままだと回転するときにギザギザになるからスムージングかけたんだけど、そうするとそうするでぼやけるなぁと。まあ、でも4KBだし。前作ったやつ(※3.4MB)のほうが描写はきれいだけど、、、。でも重さ的に使えないかなぁ。
var b:BitmapData = new BitmapData(tf.width, tf.height); b.draw(tf); var bp:Bitmap = new Bitmap(b,"never",true); var d:DisplayObject = this.targetContainer.addChild(bp); d.blendMode = BlendMode.MULTIPLY;
Bitmapの処理あんまよく理解してなかったなぁ。pixelSnappingとか初めて知ったし。テキストフィールドごとBitmapにしてしまうので、背景がついてしまう。BlendModeを変えて透けるようにしました。以下ソースの一部。。。メモです。だから、来週のAS勉強会の準備をするんだってば。
package net.ra66it.draw{
import flash.display.Sprite;
import flash.events.Event;
import flash.display.DisplayObjectContainer;
import flash.display.Graphics;
//カスタムクラス
import net.ra66it.xml.XMLloader;
import net.ra66it.draw.GraphXmlAnalytic2;
import com.yokozunat.utils.BitmapFilterUtil;
import com.yokozunat.draw.Ball;
//text
import flash.text.TextField;
import flash.text.TextFormat;
import flash.text.TextFormatAlign;
import flash.text.TextFieldAutoSize;
import flash.text.AntiAliasType;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.DisplayObject;
import flash.display.BlendMode;
import flash.system.Capabilities;
public class Graph extends Sprite {
private var xmlLoader:XMLloader;
private var mainXml:XML;
private var targetContainer:DisplayObjectContainer;
//配列
private var newsIDAry:Array;
private var newsTitleAry:Array;
private var newsSiteURLIDAry:Array;
private var newsAccessCountAry:Array;
//描画
var g:Graphics;
function Graph(xmlUrl:String, container:DisplayObjectContainer) {
this.targetContainer = container;
//UTF-8だからtrue
var isUnicode:Boolean = true;
//XMLファイルを読み込む
this.xmlLoader = new XMLloader(xmlUrl, isUnicode);
this.xmlLoader.addEventListener(XMLloader.LOAD_COMPLETE, onXMLloaded);
}
/**============================================================================================
* XML読み込み完了
============================================================================================*/
private function onXMLloaded(event:Event):void {
//XMLオブジェクトを受け取る
this.mainXml = this.xmlLoader.getXML();
var graphXmlAnalytic2:GraphXmlAnalytic2 = new GraphXmlAnalytic2();
this.newsIDAry = graphXmlAnalytic2.getNewsIdAry(this.mainXml);
this.newsTitleAry = graphXmlAnalytic2.getNewsTitleAry(this.mainXml);
this.newsSiteURLIDAry = graphXmlAnalytic2.getSiteURLIDAry(this.mainXml);
this.newsAccessCountAry = graphXmlAnalytic2.getAccessCountAry(this.mainXml);
setDrawGraph();
}
private function setDrawGraph():void {
var tmpSprite:Sprite = new Sprite;
g=tmpSprite.graphics;
//g.lineStyle(1,0x6600CC,1);
g.beginFill(0xcccc66);
g.moveTo(10,400);
var n:Number=0;
var lastX:Number;
for (var i:int=0; i < newsIDAry.length; i++) {
n=this.newsAccessCountAry[i]/180;
g.lineTo(i * 1 * 400/newsIDAry.length+10, 400 - n);
var myBall:Ball = new Ball(5,0x333300);
myBall.x = i * 1 * 400/newsIDAry.length+10;
myBall.y = 400 - n;
tmpSprite.addChild(myBall);
setText(myBall.x,myBall.y,this.newsTitleAry[i]);
}
g.lineTo((i-1) * 1 * 400/newsIDAry.length+10, 400);
g.lineTo(10,400);
g.endFill();
var filter:BitmapFilterUtil = new BitmapFilterUtil;
filter.getBevel(tmpSprite);
filter.getDropShadow(tmpSprite);
this.targetContainer.addChild(tmpSprite);
}
function setText(X:Number, Y:Number, Title:String):void {
var tf:TextField = new TextField();
//tf.embedFonts = true;
tf.autoSize = TextFieldAutoSize.LEFT;
tf.antiAliasType = AntiAliasType.ADVANCED;
tf.defaultTextFormat = getTextFormat(10);
tf.selectable = false;
tf.mouseEnabled = true;
tf.multiline = true;
tf.wordWrap = true;
tf.width = 400;
tf.height = 300;
//tf.x = X;
//tf.y = Y-10;
tf.text = "";
for (var i:int = 0; i<30; i++) {
tf.text = Title;
}
//tf.rotation = -70;
//this.targetContainer.addChild(tf);
var b:BitmapData = new BitmapData(tf.width, tf.height);
b.draw(tf);
var bp:Bitmap = new Bitmap(b,"never",true);
var d:DisplayObject = this.targetContainer.addChild(bp);
d.x = X;
d.y = Y-10;
d.rotation = -70;
d.blendMode = BlendMode.MULTIPLY;
}
private function getTextFormat(fontSize:Number):TextFormat {
var format:TextFormat = new TextFormat();
format.size = fontSize;
format.leading = fontSize*0.5;
format.color = "0x333300";
var whatOs:String = Capabilities.os;
if (whatOs.slice(0,3) == "Mac") {
format.font = "ヒラギノ角ゴ Pro W6";
} else if (whatOs.slice(0,3) == "Win") {
format.font = "MS Pゴシック";
} else {
format.font = "sans-serif";
}
return format;
}
}
}
swfのスクリーンショット
SQL を少し触っています。Blogの記事のテーブルにaccessCountというのがあったので、多い順に取り出してみた。SQLでアクセスの多い順に30件取り出して、XML -> Flashで動的に表示しています。
※続きを読むにswfがありますが、3.4MBと重いので注意。
FlashPlayer 9のマイナーバージョンの違いで表示の挙動が違っていたりした(最新版だったら問題なかったりするんだけど、、、。)。SWFObjectだったらマイナーバージョンとかも切り分けたりすることができるので、表示を確認するために、Playerを入れ直したりする時ようのメモ。ただMacの場合、古いバージョンとかだと、インテルMacのプレイヤがないからPowerPCで確認しないといけないけど。そう言う意味では、FirefoxのFlash Switcherも便利かも。
参考:
Adobe Flash Player - Downloads Uninstallers
[228683]テスト用のアーカイブ版 Flash Player の提供について
MacでFlash Playerのバージョンを切り替える (Unknown Quality)
関連:
FlashTracerがうごいた | a-blog with F
Flash Playerのバージョンを調べたかったで | a-blog with F
tags:asメモ
Windows MeでTextFieldにTextFormatでフォントを指定すると日本語が文字化けするってことをしらなかったので、メモ。日本語のフォントがだめなのかな?
Adobe Flash Player:必要システム構成を見るとWindows Meも動作すると書かれているので、どんな人が見るかにもよると思うけど、、、。一応、覚え書き。以下のようなかんじで、OSを見てやって、Windows 98/MEだったらnullにしてやればとりあえず表示はされるっぽいです。つかWindows MeでFlashPlayer9を見せてもらって結構動いていたことに感動しました。
package {
import flash.system.Capabilities;
public class SelectFont {
function SelectFont() {
}
public function getSelectFont():String {
var font:String = new String;
var whatOs:String = Capabilities.os;
if(whatOs.slice(0,3) == "Mac") {
font = "ヒラギノ角ゴ Pro W3";
} else if(whatOs.slice(0,3) == "Win") {
if(whatOs=="Windows 98/ME"){
font = null;
} else {
font = "MS Pゴシック";
}
} else {
font = "sans-serif";
}
return font;
}
}
}
以下を参考にしました。
[228653]Windows 98 や NT4 でアクションスクリプトによるフォントの設定を行った場合、特定のケースで文字化けが発生する
FLASH-JP.COM - フォーラム 5834.WindowsMe上でfontFamilyが文字化けする現象
前回のボタンのスクリプトに TSI-Pさん からスクリプト付きのコメントをいただいたので、ちょっと直してみた。ありがとうございます。なんかthisがついてたりついてなかったりと、あれですが、とりあえずメモっておこうかなと。
package {
import flash.display.SimpleButton;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.text.TextFormatAlign;
public class Buttons2 extends Sprite {
var buttons:Array;
var buttonHandlers:Array;
var count:int = 5;
var textBox:TextField;
var buttonDataList:Object;
function Buttons2(){
textBox=makeTextBox("-----");
textBox.x = 220;
textBox.y = 10;
addChild(textBox);
buttons = new Array();
this.buttonDataList = new Object();
this.buttonDataList =
{button1:"buttonHandler1ですよ",
button2:"buttonHandler2ですよ",
button3:"buttonHandler3ですよ",
button4:"buttonHandler4ですよ",
button5:"buttonHandler5ですよ"};
for (var i:int = 0; i < count; i++)
{
var button:SimpleButton = makeButton(200,40,10,10+i*50,"button"+(i+1));
addChild(button);
button.addEventListener(MouseEvent.CLICK,this.buttonHandler);
buttons.push(button);
}
}
/**
* ボタンの作成
*/
function makeButton(w:Number,h:Number,X:Number,Y:Number,labelText:String=""):SimpleButton {
var bt:SimpleButton=new SimpleButton;
var upImg:Sprite=makeUpImg(w,h);
var label:TextField=makeLabel(labelText,w,h);
bt.upState=upImg;
bt.overState=upImg;
bt.downState=upImg;
bt.useHandCursor=true;
bt.hitTestState=upImg;
bt.x=X;
bt.y=Y;
bt.name = labelText;//ボタン.name属性
upImg.addChild(label);
return bt;
}
function makeUpImg(w:Number,h:Number):Sprite {
var Img:Sprite=new Sprite;
Img.graphics.beginFill(0xff0000);
Img.graphics.drawRect(0,0,w,h);
Img.graphics.endFill();
return Img;
}
function makeLabel(Text:String,w:Number,h:Number):TextField {
var tf:TextField=new TextField ;
tf.text=Text;
tf.width=w;
tf.height=h;
tf.border = true;
tf.x=0;
tf.y=0;
var fmt:TextFormat=new TextFormat ;
fmt.font="_ゴシック";
fmt.color=0x000000;
fmt.size=12;
fmt.align=TextFormatAlign.LEFT;
tf.setTextFormat(fmt);
return tf;
}
/**
* buttonハンドラー
*/
function buttonHandler(event:MouseEvent) {
textBox.text = this.buttonDataList[event.target.name];
}
/**
* テキストの表示部分
*/
function makeTextBox(Text:String):TextField {
var tf:TextField=new TextField;
tf.text=Text;
tf.width=170;
tf.x=0;
tf.y=0;
tf.wordWrap = true;
tf.border = true;
return tf;
}
}
}
条件式?のメモ。
package {
import flash.display.SimpleButton;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.text.TextFormatAlign;
public class SwButton extends Sprite {
var swButton:SimpleButton;
var swFlg:Boolean;
var textBox:TextField;
/**
* コンストラクタ
*/
function SwButton() {
swFlg = false;
textBox=makeTextBox("スイッチを押してみてください。");
textBox.x = 100;
textBox.y = 0;
addChild(textBox);
swButton=makeButton(100,100,0,0,"スイッチ");
addChild(swButton);
swButton.addEventListener(MouseEvent.CLICK,clickHandler);
}
/**
* ボタンが押されたら
*/
function clickHandler(event:MouseEvent):void {
swFlg = (swFlg != true)?true:false;
if (swFlg) {
//
textBox.text = "押されました";
} else {
textBox.text = "解除";
}
}
/**
* ボタンを作る
*/
function makeButton(w:Number,h:Number,X:Number,Y:Number,labelText:String=""):SimpleButton {
var button:SimpleButton=new SimpleButton;
var upImg:Sprite=makeUpImg(w,h);
var label:TextField=makeLabel(labelText);
button.upState=upImg;
button.overState=upImg;
button.downState=upImg;
button.useHandCursor=true;
button.hitTestState=upImg;
button.x=X;
button.y=Y;
upImg.addChild(label);
return button;
}
function makeUpImg(w:Number,h:Number):Sprite {
var Img:Sprite=new Sprite;
Img.graphics.beginFill(0xff0000);
Img.graphics.drawRect(0,0,w,h);
Img.graphics.endFill();
return Img;
}
function makeLabel(Text:String):TextField {
var tf:TextField=new TextField;
tf.text=Text;
tf.width=100;
tf.x=0;
tf.y=0;
var fmt:TextFormat=new TextFormat;
fmt.font="_ゴシック";
fmt.color=0x000000;
fmt.size=12;
fmt.align=TextFormatAlign.LEFT;
tf.setTextFormat(fmt);
return tf;
}
/**
* テキストの表示部分
*/
function makeTextBox(Text:String):TextField {
var tf:TextField=new TextField;
tf.text=Text;
tf.width=200;
tf.x=0;
tf.y=0;
tf.wordWrap = true;
return tf;
}
}
}
ちょっと前に作った、色を変化させるやつ。メモ。クリックすると色が変わります。
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
public class TransformColor extends Sprite {
var step:int = 100;
var flagR:Boolean = false;
var flagG:Boolean = false;
var flagB:Boolean = false;
var defaultColor:int = 0xf875a7;
var defaultColorR:int = defaultColor >> 16;
var defaultColorG:int = defaultColor >> 8 & 0xff;
var defaultColorB:int = defaultColor & 0xff;
var targetColor:int = 0x99d8d4;
var targetColorR:int = targetColor >> 16;
var targetColorG:int = targetColor >> 8 & 0xff;
var targetColorB:int = targetColor & 0xff;
var recentColor:int = defaultColor;
var recentColorR:Number = recentColor >> 16;
var recentColorG:Number = recentColor >> 8 & 0xff;
var recentColorB:Number = recentColor & 0xff;
var changeValueR:Number = (targetColorR-defaultColorR)/step;
var changeValueG:Number = (targetColorG-defaultColorG)/step;
var changeValueB:Number = (targetColorB-defaultColorB)/step;
var rect:Sprite;
public function TransformColor() {
rect = new Sprite();
rect.graphics.beginFill(recentColor);
rect.graphics.drawRect(0, 0, 300, 200);
addChild(rect);
rect.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
}
private function onMouseDown(event:Event):void {
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
function onEnterFrame(event:Event):void {
trace("changeValueR:"+changeValueR);
trace("recentColorR:"+recentColorR);
trace("targetColorR:"+targetColorR);
trace("changeValueG:"+changeValueG);
trace("recentColorG:"+recentColorG);
trace("targetColorG:"+targetColorG);
trace("changeValueB:"+changeValueB);
trace("recentColorB:"+recentColorB);
trace("targetColorB:"+targetColorB);
trace("---");
if (Math.abs(targetColorR-recentColorR) > Math.abs(changeValueR)) {
recentColorR += changeValueR;
} else {
recentColorR = targetColorR;
if(!flagR){
flagR = !(flagR);
}
}
if (Math.abs(targetColorG-recentColorG) > Math.abs(changeValueG)) {
recentColorG += changeValueG;
} else {
recentColorG = targetColorG;
if(!flagG){
flagG = !(flagG);
}
}
if (Math.abs(targetColorB-recentColorB) > Math.abs(changeValueB)) {
recentColorB += changeValueB;
} else {
recentColorB = targetColorB;
if(!flagB){
flagB = !(flagB);
}
}
recentColor = (recentColorR << 16) + (recentColorG << 8) + (recentColorB);
rect.graphics.clear();
rect.graphics.beginFill(recentColor);
rect.graphics.drawRect(0, 0, 300, 200);
if ((flagR)&&(flagG)&&(flagB)) {
removeEventListener(Event.ENTER_FRAME,onEnterFrame);
trace("色の変化終わり");
}
}
}
}


