ExternalInterfaceでつまづく
Posted by admin | Filed under Actionscript, Actionscript2.0, Actionscript3.0, css, flashサイト
swfとjavascript間で通信するためのクラス
ExternalInterface Class でつまづいたのでメモ
かるくつまづいた 1
allowScriptAccessをsameDomainかalwaysにしないと
swfとjavascript間で通信できない。
追加先
parameタグ/embededタグ(アトリビュート)
まあまあつまづいた 2
objectタグのidの名前に"extanal"の文字列
例)"objextanal","extanalObj","myextanalObj"
を加えないとIEで
swfからjavascriptの関数を呼び出せるが戻り値がnullになって返ってくる。
注意!!
id名が重複すると最初に表示されたもの以外はnullになるみたい
複数同じswfをページくつける場合は動的はidを用意してください
ExternalInterface.call Internet explorerでnullが返ってくる件
http://quality.ekndesign.com/archives/2006/07/externalinterfa.html
かなりつまづいた 3
これもIE系
IEはIE8だけなくとも通信できた気がする・・・(あいまい)
objectタグに
classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
csとかでパブリッシュすればタグにデフォルトで含まれてるんだけどね
これがないと
swfからjavascriptの関数を呼び出せるが戻り値がnullになって返ってくる。
そもそもclassidってなんだよとかおもったけど
ブラウザの ActiveX コントロールを識別します。だそうだ。
こんなんだから
ExternalInterface Classは嫌いというか苦手意識がつくよね。
参考になったページです
ExternalInterfaceとかの落とし穴まとめ
http://0-9.sakura.ne.jp/blog/archives/2008/04/14224435.html
ExternalInterfaceを使ってみる (2)
http://www.project-nya.jp/modules/weblog/details.php?blog_id=644
Tags: Actionscript
雪が降るエフェクトAS3
Posted by admin | Filed under Actionscript3.0
季節はずれですけど、
雪国生まれの僕が納得いく
雪エフェクトをちょっと昔に発見したので紹介します。
※多分adobeのサイトにあったサンプルをちょっといじった。
サンプルasはこちら
main.as
snowflake.as
Tags: Actionscript3.0
2つの色を混ぜてみる
Posted by admin | Filed under Actionscript3.0
2つの色を混ぜて中間色を求めるスクリプトが
必要になったのでググったらありました。
参照サイト: nondelion.com 2つの色の中間色を求める方法
~方法~
1, 2色とも16進数からRGB値を割り出す(ビットマスクを利用します)
2, RGB値を足す
3, また16進数に戻す
こんな感じ。
以下がサンプルソースになります
package
{
import flash.display.Sprite;public class Main extends Sprite
{
//黒色
private var color1:Number = 0×000000;
//赤色
private var color2:Number = 0xff0000;public function Main():void
{
init();
}private function init():void
{
var sp:Sprite = new Sprite();//赤と黒の中間色
var mixColor:Number = setMiddleColor(color1, color2);sp.graphics.beginFill(mixColor);
sp.graphics.drawRect(0, 0, 100, 100);
sp.graphics.endFill();
addChild(sp);}
private function hex2rgb(n:Number):Array
{
var rgbArray:Array = new Array(3);
rgbArray[0] = ( n >> 16 ) & 0xff;
rgbArray[1] = ( n >> 8 ) & 0xff;
rgbArray[2] = n & 0xff;
return rgbArray;
}private function setMiddleColor(firstColor:Number, secondColor:Number):uint
{
var firstRGB:Array = hex2rgb(firstColor);
var secondRGB:Array = hex2rgb(secondColor);
var red:Number = int((firstRGB[0] + secondRGB[0]) * 0.5);
var green:Number = int((firstRGB[1] + secondRGB[1]) * 0.5);
var blue:Number = int((firstRGB[2] + secondRGB[2]) * 0.5);
var hex:uint = red << 16 | green << 8 | blue;
return hex;
}
}}
Tags: Actionscript3.0
MouseEventではまった事
Posted by admin | Filed under papervision3D
マウスオーバーとクリックでインスタンス名が違う・・。
//コンストラクタ
private var tex:TextField = new TextField();
private var sp:Sprite = new Sprite();addChild(sp);
tex.text = “hoge”;
sp.addChild(tex);//イベントリスナー
sp.addEventListener(MouseEvent.ROLL_OVER, btnOver);
sp.addEventListener(MouseEvent.CLICK, btnCK);
イベント内容
private function btnOver(e:MouseEvent):void
{
trace(e.target.name, sp.name, e.target == sp);
}
private function btnCK(e:MouseEvent):void
{
trace(e.target.name, sp.name, e.target == sp);
}
なんで違うインスタンス名になっちゃうのーーーーーーー
きーってなってましたが、ここみて解決しました。
http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/flash/events/MouseEvent.html#CLICK
target
ポインティングデバイスの下にある InteractiveObject インスタンスです。target は、必ずしもイベントリスナーを登録した表示リスト内のオブジェクトとは限りません。現在イベントを処理している表示リスト内のオブジェクトにアクセスするには、currentTarget プロパティを使用します。
currentTargetを使えってことですか
そうですか。こうですか。わかりました。
//コンストラクタ
private var tex:TextField = new TextField();
private var sp:Sprite = new Sprite();addChild(sp);
tex.text = “hoge”;
sp.addChild(tex);//イベントリスナー
sp.addEventListener(MouseEvent.ROLL_OVER, btnOver);
sp.addEventListener(MouseEvent.CLICK, btnCK);
イベント内容
private function btnOver(e:MouseEvent):void
{
trace(e.target.name, sp.name, e.target == sp);
}
private function btnCK(e:MouseEvent):void
{
trace(e.target.name, sp.name, e.target == sp);
}
イベント内容
private function btnOver(e:MouseEvent):void
{
trace(e.currentTarget.name, sp.name, e.currentTarget == sp);
}
private function btnCK(e:MouseEvent):void
{
trace(e.currentTarget.name, sp.name, e.currentTarget == sp);
}
くそ!
Tags: Actionscript3.0
FlashLite1.1をすこしいじった
Posted by admin | Filed under Actionscript
お題目のとおり少しいじりました
携帯でオールflashのサイトです(swfを直接開いたタイプのアレ)
こまったことにdocomoのFlashLite1.1の携帯
上下キーのイベントがとれない・・・。
on (keyPress "<Up>") {
trace("Up");
}
on (keyPress "<Down>") {
trace("Down");
}
上下キーのイベントがとれないとか普通ないだろうよおお。
んで、さらに調べてたら上下キーはボタンに対するフォーカスにあてられてる模様
参照サイト KDDI au: マルチメディア・コンテンツ > Flashコンテンツ
フォーカスは上から順になります。
上からボタンが2つ並んでる状態を仮定すると
例)
○ ボタン1
○ ボタン2
一番最初に下キーを押せす
>ボタン1にフォーカスがきます
一番最初に上キーを押せす
>ボタン2にフォーカスがきます
(※注意)
ディスプレイにボタンが表示されてないとフォーカスはできません。
これを利用して
ボタンを透明、もしくは背景と同じ色にして
ボタン1に
on(rollOver,press){
trace("Down");
//gotoAndStop(3)
}
ボタン2に
on(rollOver,press){
trace("Up");
//gotoAndStop(1)
}
こんな感じで上下にスクロールできる携帯flashをつくりました
他にも方法があるかもしれませんけど。
ちなみにスクロールの一番上と下は片方だけでいいのでこんな感じにしときました。
一番上(1フレーム目)
ボタン1に
on(rollOver,press){
trace("Down");
//gotoAndStop(2)
}
ボタン2に
on(rollOver,press){
trace("Stay");
//gotoAndStop(1)
}
一番下(3フレーム目)
ボタン1に
on(rollOver,press){
trace("Up");
//gotoAndStop(3)
}
ボタン2に
on(rollOver,press){
trace("Stay");
//gotoAndStop(2)
}
これでオッケーとかおもってたんだけど
なんかフォーカスついちゃうし・・。
なので一番最初と最後のところは
2フレームづつ使いました。
Tags: FlashLite1.1
小さなコトスペシャル
Posted by admin | Filed under Actionscript3.0, css
小さなコトでイライラしたので忘れていもいいように
書き留めときます。
stage.stageWidth/stage.stageHeightはブラウザによって値を取得できるタイミングがちがう
IEはコンストラクタで値を取得しようとしてもとれないわよ
firefoxはとれるけどね。
そうめん使ってる人はrunの時もステージサイズはとれないわ!
次のfunctionで取得して!!
flvをNetStreamクラスをつかって再生した時の音量を0にしたい
こいつがミソ! 無音にできます。
import flash.media.SoundTransform;
/*このへんはおきまり
var nc:NetConnection = new NetConnection();
nc.connect(null);
var ns:NetStream = new NetStream(nc);
*/
//音量調整するところ ※SoundTransform 第一引数と第二引数で右と左のボリュームだったきする。
var mySoundTransform:SoundTransform = new SoundTransform(0);
ns.soundTransform = mySoundTransform;
TextFieldのautoSizeはas2.0と書き方が違う
textField.autoSize = (Boolean値) だったのが
左ぞろえ右揃え中央ぞろえとか機能がついてんだね
| 定数 | 文字 | 説明 |
|---|---|---|
| TextFieldAutoSize.NONE | “none” | なし |
| TextFieldAutoSize.LEFT | “left” | 左に揃えて整形 |
| TextFieldAutoSize.RIGHT | “right” | 右に揃えて整形 |
| TextFieldAutoSize.CENTER | “center” | 中央に揃えて整形 |
オブジェクトを最前面にしたい時
いっつも忘れるコレ
stage.setChildIndex(最前列にしたいオブジクトの名前,numChildren-1);
例)
var sp:Sprite = new Sprite();
var objS:Shape = new Shape();
sp.addchild(objS);
・・
・
中略
//spの中でobjS最前列にする
sp.setChildIndex(objS,numChildren-1);
しらべるといつもnumChildrenがくせものに感じる
xmlのパースの仕方
これもすぐ忘れる
本みないとわかんなくなる
アトリビュートの場合(アトリビュートがIDの場合)
var str:String = hoge@ID
長いしだんだん眠くなってきた。
長くなりそうだから続きは次にかきます。
Tags: Actionscript3.0
初めてのpapervision3D その3
Posted by admin | Filed under Actionscript2.0, Actionscript3.0, papervision3D
次は3Dの球体にテクスチャを張り付けてみよう。
BitmapFileMaterialをつかって画像をはりつける
せっかくなのでgooglemapの航空写真をつかってみました。
そしてソース
package
{
import flash.display.Sprite;
import flash.events.Event;
import caurina.transitions.Tweener;
import org.papervision3d.view.*;
import org.papervision3d.objects.primitives.*;
import org.papervision3d.materials.*;
public class Main extends BasicView
{
private var mySphere:Sphere;
public function Main() {
init();
}
private function init():void
{
var material:BitmapFileMaterial = new BitmapFileMaterial("bg.jpg");
mySphere = new Sphere(material, 300, 30, 30);
var sp:Sprite = new Sprite();
scene.addChild(mySphere);
startRendering();
sp.addEventListener(Event.ENTER_FRAME,enterFrameHandle);
}
private function enterFrameHandle(e:Event):void
{
mySphere.rotationY += 0.5;
}
}
}
追加変更した部分は・・
1、materialsをインポート
import org.papervision3d.materials.*;
2、BitmapFileMaterialに対象画像のパスをつっこみ
var material:BitmapFileMaterial = new BitmapFileMaterial(”bg.jpg”);
3、Sphereをnewする際に第1引数にいれちゃういましょう
mySphere = new Sphere(material, 300, 30, 30);
ちなみに第2引数は表示サイズ、第3引数と第4引数は縦線横線の数になります。
初めてのpapervision3D その2 の時より線を増やしてカクカク感をとりより球体らしくしました。
VF1からVF3位の差がでたきがします。
Tags: Actionscript3.0, papervision3D
初めてのpapervision3D その2
Posted by admin | Filed under Actionscript, Actionscript3.0, papervision3D
前回のつづきです。
※Papervision3D 2.0 Great Whiteをダウンロードしてパスが通っているのが前提とりなります。
ではではこんな感じで
3Dの球体がよこにクルクル回るクラスをかいてみましょうか。
package
{
import flash.display.Sprite;
import flash.events.Event;
import org.papervision3d.view.*;
import org.papervision3d.objects.primitives.*;
public class Main extends BasicView
{
private var mySphere:Sphere;
public function Main() {
init();
}
private function init():void
{
mySphere = new Sphere(null, 300, 10, 10);
var sp:Sprite = new Sprite();
scene.addChild(mySphere);
startRendering();
sp.addEventListener(Event.ENTER_FRAME,enterFrameHandle);
}
private function enterFrameHandle(e:Event):void
{
mySphere.rotationY += 1;
}
}
}
Tags: Actionscript3.0, papervision3D
初めてのpapervision3D
Posted by admin | Filed under Actionscript, Actionscript3.0, FlashDevelop, papervision3D
flashとか作りますよ、とかいうと必ずといっていいほど
「3Dできんの?」
なんて聞かれますよね。
てなわけで papervision3D をつかってみた。
papervision3Dとは簡単に3Dグラフィックスを表現できるactionscriptライブラリです。
まずはpapervision3Dをダウンロードしよう。
とりあえず現状で一番新しいバージョン
Papervision3D 2.0 Great White をつかいます。
※バージョン1.5 / 1.7 とはいろいろ仕様がかわっているそうです。
まためんどくさいことに
Papervision3D 2.0 Great WhiteはSubversionで入手するしかないようです。
※Subversionについてはこちらを参照してください
Subversion - Wikipedia
TortoiseSVNのインストールと設定(windowsのひと)
リボジトリのURL:
http://papervision3d.googlecode.com/svn/
ダウンロードしたフォルダは任意のディレクトリにおいておきましょう。
ちなみに僕はフォルダに「p3d」と名前をつけCドライブ直下においたのでパスはこうなりました。
C:\p3d\trunk\as3\trunk\src
でflash cs3 環境の場合は
編集 >> 環境設定 >> Actionscript >> Actionscript 3.0 設定
で上記のパスを追加
flashDevelop環境の場合は
Tools > Global Classpaths に上記パスを追加
これでPapervision3D 2.0 Great Whiteを利用できる環境ができました
ながかったー
ながかったのでスクリプトは次の機会に
・・つづく
Tags: FlashDevelop, papervision3D
インスタンスのnameプロパティ
Posted by admin | Filed under Actionscript, Actionscript3.0
Actionscript3.0では
getChildByName()メソッドで
インスタンスのnameプロパティが参照できます。
for (var i:int = 0; i < 10; i++)
{
var mc:MovieClip = new MovieClip();
mc.name ="mc" + i;
this.addChild(mc);
}
for (i = 0; i < 10; i++)
{
trace(this["mc" + i]);
//出力結果 undefined ・・・これではまりました。
trace(this.getChildByName("mc" + i).name);
}
名前でインスタンスを動かしたかったんです。
参照ページ
getChildByName()メソッド
Tags: Actionscript3.0

