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
初めての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
flashの情報をローカルで保存してみよう
Posted by admin | Filed under Actionscript, Actionscript2.0
flashでクッキーを使いたい場合
SharedObjectクラスを使うと大変便利ですよ
いままで使ったことなかったけど、
意外とお手軽だね。
わかりづらいけどリロードした後
選択した項目に印がついたままならローカルに情報が保存されています。
ちなみに配列を保存することもできます。
そして下がソースです
var sObj:SharedObject = SharedObject.getLocal("flag");
//ステージ上に配置したラジオボタンの名前
var rgBtn:Array = [point0, point1, point2];// マウスリスナーオブジェクト
var mouseListener:Object = new Object();if (sObj.data.flag != undefined)
{
rgBtn[sObj.data.flag].selected = true;
}
//マウスダウンイベントを受け取った時
mouseListener.onMouseDown = function() {
var nCount:Number = 0;
while (nCount < rgBtn.length) {
if (rgBtn[nCount].hitTest(_xmouse, _ymouse, false))
{
sObj.data.flag = nCount;
break;
}
nCount++;
}
};Mouse.addListener(mouseListener);
flashlite2.0から利用できるから携帯でもきっと活躍できるよ!
ドコモ以外だけどね!
ドコモはクッキー使えないし、
flashlite1.1から2.0とばして最近3.0だから
実際まだまだflashで携帯サイトは作りたくないよねー
Tags: Actionscript, Actionscript2.0
Tweenerをつかってみよう 2
Posted by admin | Filed under Actionscript, Actionscript2.0
なんか久しぶりにflashを作ることになりそう(しかもas2.0で)
せっかくなのでTweener使ったろうと思いさらっとチェックしてみよう。
お題は
【Tweenerペジェ線をスクリプトで描画してみよう!】
ペジェ線でうごかせるんだねTweener
おもすれー
まずはCurveModifiersをインポート
import caurina.transitions.properties.CurveModifiers;
ふむふむ参照サイトによると
_bezier配列に座標を設定してやると、その点を「ベジエ曲線軌道のコントロールポイント」とした、トゥイーンが行なわれます。
ふむふむ。
CurveModifiers.init();
はとりあえず入れとけばいいのか。
では
さっそくいっちょas2.0で書いてみよう!
ソース
import caurina.transitions.Tweener;
import caurina.transitions.properties.CurveModifiers;
CurveModifiers.init();//myMcはステージ上に配置したムービークリップ
myMc._x = 40;
myMc._y = 100;
var xpos:Number = myMc._x;
var ypos:Number = myMc._y;function pointDrow():Void {
lineStyle(2,0xff0000,100);
moveTo(xpos,ypos);
lineTo(myMc._x,myMc._y);
xpos = myMc._x;
ypos = myMc._y;
}myMc.onPress = function():Void {
Tweener.addTween(myMc,{_x:460, _y:100, _bezier:[{_x:266, _y:212}, {_x:134, _y:57}, {_x:81, _y:206}], time:5, transition:"linear"});
var timer:Number = setInterval(pointDrow, 10);
};
こんな感じで結果がこれです
※くろぽちを押してみて
いいね、
マスクにつかっても面白いし。
参照URL
AS3でTweener 1.31.67を使う
Tweener Transition sheet
Tweener Documentation and Language Reference
Tweenerをつかってみよう 1
Tags: Actionscript, Tweener
外部からLoadした画像の処理
Posted by admin | Filed under Actionscript, Actionscript2.0
外部から読込んだ画像をそのまま
拡大・縮小・回転をした場合
カクカクのきったない表示になってしまいます。
この対処法として、読込んだ画像はそのまま使わず
BitmapDataにdrowしスムーシングをかければ
オブジェクトを拡大・縮小・回転してもきれいに表示されるというものです。
※ソースはas2.0です
import flash.display.BitmapData;
var my_mcl:MovieClipLoader = new MovieClipLoader();
var myListener:Object = new Object();
my_mcl.addListener(myListener);/*
ステージ上でボタンを配置している為、震度を0に指定
*/
var mcItem:MovieClip = createEmptyMovieClip("Item", 0);
my_mcl.loadClip("img/mario.png",mcItem);myListener.onLoadInit = function(targetMc:MovieClip):Void {
if (targetMc._name == "Item")
{
var mcDisplay:MovieClip = createEmptyMovieClip("Display", getNextHighestDepth());
bitmapSmoothing(targetMc,mcDisplay);
btnAction(mcDisplay);
}
};function bitmapSmoothing(loader:MovieClip, holder:MovieClip):Void {
var bd:BitmapData = new BitmapData(loader._width, loader._height, true, 0×00000000);
bd.draw(loader);
holder.attachBitmap(bd,0,"auto",true);
holder._x = Stage.width * 0.5 - loader._width * 0.5;
holder._y = 50;
loader.removeMovieClip();
}
//ボタンは直接ステージ上に置いたものをつかってます
function btnAction(targetMc:MovieClip):Void {
btn1.onPress = function():Void {
targetMc._xscale += 10;
targetMc._yscale += 10;
};
btn2.onPress = function():Void {
targetMc._xscale -= 10;
targetMc._yscale -= 10;
};
btn3.onPress = function():Void {
targetMc._rotation -= 15;
};
}
参照サイト にゃあプロジェクト - ウェブログ - 画像のスムージング設定 (2)
Tags: Actionscript2.0, flash
