ActionScript 誰かが物凄い勢いで解答するスレ33
■ このスレッドは過去ログ倉庫に格納されています
AcitonScriptのことなら
初歩的な質問でもなんでもおk
見れない、保存したい、flashを作りたいはスレ違い
下記の関連スレ、超基本的な質問へ。
●質問する時は自分の環境を書く(AS2,AS3の別も)
●質問はものすごい勢いじゃなくて結構
●できるだけコードも示す
●まず自分がやりたいことを明確に書く。そのために試してみた処理を書く
前スレ
ActionScript 誰かが物凄い勢いで解答するスレ32
http://toro.2ch.net/test/read.cgi/swf/1385339160/
関連スレ
Flashの超基本的な質問はここでしろ! part44
http://toro.2ch.net/test/read.cgi/swf/1363773522/
※初心者は↑こちら推奨 ●質問する時は自分の環境を書く
OS:Win7
使用ソフト:adobe flashPro CS5.5
AS:3
●できるだけコードも示す
http://studio.cormo.net/#/blog/2009/11/04/209/
●まず自分がやりたいこと
この逆再生クラスを利用して指定フレーム数だけ逆再生(または再生も)させるボタンを作りたい。
if(e.target.currentFrame == 途中で送信してしまった。すまない。
”if(e.target.currentFrame == ”からどう記述すれば良いのか教えてください。
if(e.target.currentFrame == e.target.currentFrame - 24)とか書いてみたけどダメだった。 これでどーだお
//メインタイムライン
new FrameAnimation( 5 );//指定フレーム数を引数で渡す
//FrameAnimationクラス内 メンバ変数追加
private var fNo:int;//指定フレーム数
private var co:int;//フレームカウンタ用
public function FrameAnimation( no:int ){//コンストラクタで指定フレーム数を受け取り
fNo = no;//メンバに入れとく
function eventTraffic(mc:MovieClip,way:Boolean):void{//イベント設定関数内
co = 0;//カウンタクリア
function playFrame(e:Event):void{//順再生
if( co>fNo ) return;//指定フレーム数以上なら処理キャンセル
co++;
function backFrame(e:Event):void{//逆再生
if( co>fNo ) return;
co++; flashがブラウザで使用可能か調べるにはどうすれば良いですか? >>6
ありがとう!ばっちり動いた!
出来れば指定したフレームに到着するまではボタン無効化出来ると尚有り難い!
そうしたら汎用性も出て来るんじゃないかな?
こんなの簡単に書けちゃうなんて凄いよ!ほんとありがとう! >>7
使用不可能のブラウザなんて無いだろ?
>>8
>指定したフレームに到着するまではボタン無効化
フラグ作って到着してないならfalse したらtrue
falseならボタン処理をキャンセル 応用だがんがれ 物凄い勢いで解答じゃなくて自分でやれってレスが付いててワロタwwwww
ワロタ・・・ 単純な質問なんですけれど
AS2でcreateEmptyMovieClipで作成した空のムービークリップってどんなふうに使うことができるの? だからなんだそのつまり…
単に動的に作成したMCの中に 動的に絵を書いたりどっかから絵をロードしたり
テキストを表示させたりと… 色々できるおw ヘルプは見たの? Flashでゲームを作っており、ゲーム結果のスコアをランキング化したいと思っています。
サーバーへスコアを渡そうと考えていますが、それだと不正なアクセス(鯖に直接値を投げるとか)でもランキングに反映されてしまいます。
このような時みなさんはどういった実装をしていますでしょうか?
補足: AS3でサーバーはPHPを使用しています。 自分は暗号化した情報も一緒に送って、サーバ側で復号して正当なデータか確かめてるな
まぁこれもそんなにいい手ではないけど >>15
なるほど、参考になります
確かに暗号化は、Flash自体簡単にソース見れちゃうので暗号化もあってないようなものですね
それでも無いよりはマシなので候補の一つに致します
ありがとうございました
今回は簡単なゲームのランキングなのでそこまでガチガチにする必要もないのですが、
世の中にはセキュアなデータをやり取りする場合もあると思います
そのような時、一体どうやっているのか気にもなりますし勉強にもなりますので、
他に違う手法でやっておられる方いらっしゃれば是非お聞かせください 今ちょっと思いつくとこでは、ECサイトみたいにセッションデータをサーバ側とクライアント側両方に持つとか
結果だけでなくプレイ中もサーバにデータ送って継続的に確認するとか…
こういう手だとサーバが色々大変だろうけど >>17
わざわざ考えていただいてありがとうございます!
とても参考になります! flashcs5,AS3,winです。
MySQLのテーブル内に記述したCString型の文章をphp経由でflash上に表示させているんですが、
文章内に % があると、次の文字が文字化けしたようになってしまいます。
エスケープしようと、\%や%%や^%など色々やってみたんですが効果がありません。
エスケープの方法が違うのか、他に原因があるのか、対策を教えていただきたく。 >>14
ゲームプレイ時間をチェックするとか、ゲームでは絶対出せないスコアだったらはじくとかもあります。
(自分の場合は短時間でありえない桁のスコアを入れられるケースがあったので) >>16
swfにembedしたswfのソースはデコンパイルできないとかどっかて読んだ気がするからそこに暗号鍵的なもの置いとくとか 解答しないでヒントだけ与えるだけだったら、技術交換スレでやればええやん ヒントだけ与える ってどこのレスの事だい?
てかまた落ちるぞ 保守ageeee var bmp = new flash.display.BitmapData(500, 1000, true, 0x00ffffff);
というやつを配列で増やしたいんですけれどどう書けばいいですか?
bmp1
bmp2
bmp3...
みたいに中身そのものを量産したいです。その数だけdrawできればと考えています。 >>25
var cnt = 0;
this["bmp" +cnt]=new flash.display.BitmapData(500, 1000, true, 0x00ffffff); var Neko:String="";
Btn.addEventListener(MouseEvent.CLICK,Tweet(Neko));
function Tweet(Neko:String):Function {
trace("ライオンのきもち"+Neko);
return function Tweet(event:Event):void;
}
こうすると、ボタンを押さなくても実行されてしまうんですが・・ 実行されるってのはtraceのこと?
ならaddEventListenerの時点でTweet呼び出してるんだから当然
何をreturnしたいのかよくわからんけど ちょっと教えて欲しい
FlashCS6なんだが、コードヒントがでなくなって放置していたんだが
自動的にimportされたクラスを削除しまくったら、
コードヒントの黄色三角の警告が出なくなって、コードヒントが復活した。
たぶん、ムービークリップごとにクラスファイルimportされるから
上限の800を超えてしまっていたんだろうって思うんだが。どうなんだろう?
あと、FLAファイル内にimportされるクラスファイルってrootの1フレーム目に書き出せば
それ以降では書かなくても良いんだろうか? コードヒントはあまり使わないからわからんな
>FLAファイル内にimportされるクラスファイルってrootの1フレーム目に書き出せば
>それ以降では書かなくても良いんだろうか?
うn すみません、質問させてください
環境:Win7 pro 64bit ,Flash CS6 ver.12.02.529(アップデートしたばかりです) 言語:AS3.0
症状:この環境において、埋め込みフォントの文字列がtextFieldに表示されません
同じコードでも、CS4なら正しく表示されます
fontsフォルダには正しくverdana.ttfがあります
CS6でも埋め込みフォントを表示させるにはどうしたらよいでしょう? どなたか、どうぞお助け下さい…!宜しくお願いします!
(このコードは詳説ActionScript3.0(オライリー社)に記載されてる通りのものにTextFormatを追加しただけです)
package {
import flash.text.*
import flash.display.*;
public class EmbeddedFont extends Sprite {
//フォント埋め込み
[Embed(source = "c:/windows/fonts/verdana.ttf",fontFamily ="Verdana")]
private var Verdana:Class;
public function EmbeddedFont() {
var fontFormat:TextFormat = new TextFormat();
fontFormat.size = 60; fontFormat.color = 0x000000;
var t:TextField = new TextField();
t.embedFonts = true;
t.border = true; t.width = 400;
t.htmlText = "<FONT FACE='Verdana'>Hello World!</FONT>";
t.setTextFormat(fontFormat);
addChild(t);
}
}
}
ムービープレビューした結果 http://neo.vc/uploader/src/neo11479.jpg 上:CS6 下:CS4 これじゃだめか うちのCS5.5はこれで出たお
fontFormat.font="Verdana";//追加
//t.embedFonts = true;//削除
t.htmlText = "<b>Hello World!</b>";//変更 34さん、レスありがとうございます
ご指摘くださった箇所を修正したら
見事行けました!!!!
ありがとうございます!!!
勉強してる本が古くて(主にCS4向け)
ずっとCS6が使えずにいたので、とても助かりました!
後で自分でもリファレンスガイドを確認してみます スーパー困った。これまでFlash製入力フォームを含んだコンテンツをローカルプロジェクタで実行してきたんだけど、クライアントが新規導入したWindows8.1でプロジェクタ実行はできるものの、テキストフィールドにフォーカスが当たってもスクリーンキーボードが出ない。
ググってみたけど日本語の情報はほとんどないしAdobeのフォーラムも「help me brothers and sisters!」の悲痛な投稿で終わってるし、、、
どなたか情報ご存知でないですか? >>38
キーボードがないタブレットモデルのWindows8以降の話。なぜここまで問題になってないかがわからない。ほぼ全てのタブレットで起きるのに。 そういや、文字入力させたことないや。
ローカルプロジェクタじゃなくて、MetroUIのIEだけだけど。
次々に選択肢を選ぶだけだからなぁ。 よっぽど液タブWin8のFla開発者が少ないんだろうな〜
騒いでいればその内対応してくれるお
諦めずにAdobeやMSにメールし続けるんだ MSの方は…対応してくれないかな?
1ヵ月後くらいにまたその後の経過を報告してくれ
状況が改善されていないなら いかにWin8がFla開発者に対してクソなのかって事を
宣伝しまくってくれる! 最新のFlashPlayerで生成したプロジェクタ使ってるよな? デスクトップアプリはflashに限らず手動で出さないと出ないよ 「20HITぱるぷんて」を使い始めてクリック収入は少し入ってきたけど、売上まではいかない・・・売り下をあげたいのですがアドバイスを下さい。 >>46
手動っていうのはタスクバーのタッチキーボードアイコンを押して出すってこと もうスクリーンキーボードのコンポーネント作っちゃえおw NaNになったらテキストフィールドに0を入れたい どうすんだっけ?
var val:Number = Number( this.aaaTXT.text );//テキストエフィールドから(小数点有り)の数値入力
trace( val );//文字列が混ざると NaN になる
if( val==NaN ){//NaNの時の処理を書きたいがifで引っ掛からない
if( val=="NaN" ){//これもだめ ん? 自己解決っぽい これでifに引っ掛かった
if( !val ){//文字列混ざった時の処理
これが一般的手法なんだろかw Test();
function Tast(e:MouseEvent):void{
parent.removeChild (this);
}
で、リムーブしていたMcを
Test();
function Tast(e:MouseEvent):void{
Test2();
}
function Test2():void{
parent.removeChild (this);
}
とするとリムーブできなくてエラーとなります。
たぶん(this)が見つからないためのエラーだと思いますが、対処法がわかりません。
ぜひ教えてくださいお願いします >>52
よくわからんコードだな
removeChild (this) って事は消したいMC内のフレームにコード書いてるんだ?
AS1,2からAS3へ移行中(勉強中)って事? AS3の質問です
ロード画面を作っているのですが、ステージ上にあるインスタンス名がpercentAreaのテキストフィールドにうまく数字が表示されません
ただロード自体はできているらしくロードが終わると2フレーム目へ移動してくれます
trace(percent);で様子を見たところ、ロード画面が表示されてもトレース画面にはなにも出力されず
しばらくして100と出力され2フレーム目へ移動します
どうすればテキストフィールドにうまく数字が表示されるでしょうか?
stage.addEventListener(Event.ENTER_FRAME, loaderFrame);
function loaderFrame(event:Event):void
{
var percent:int = Math.ceil(loaderInfo.bytesLoaded / loaderInfo.bytesTotal * 100);
percentArea.text = percent + "%";
trace(percent);
if (loaderInfo.bytesLoaded == loaderInfo.bytesTotal)
{
stage.removeEventListener(Event.ENTER_FRAME,loaderFrame);
gotoAndStop(2);
}
}
stop(); >>56
ウチはそれで出たお テキストフィールドのとこデバイスフォントか埋め込みにしてる?
>>55
スレタイ読め 当てずっぽでもいいんだお 質問者以外にも何かヒントになるかもしれん
それに過疎ってんのに無駄スレ消費もくそもないお んじゃあ ターゲットが間違ってるんだろうな
ターゲット.percentArea.text = percent + "%";
そもそもそのコードどこに書いてんの? >>59
ターゲットの仕方がおかしかったみたいです
無事動きました。ありがとうございました XML読み込んで抽出する際に
function getFileList(_name:String):XMLList{
return xml.filename.(text() ==_name);
}
は普通に返してくれるのに、
function getFileList(_name:String):String{
var _type=1;
var _filelist:XMLList;
switch(_type){
case 1:
_filename = xml.filename.(text() ==_name);
}
return _filelist;
}
みたいな感じでswitch構文の中でXMLから抽出しようとするとundefinedになってしまう
どこでどうやってもswitchの中だとダメだったんだけどこういう仕様なのだろうか・・・ やろうとしてることとそのコードが違うと思うよ。
よくコード見てみ xml.filename.〜 てのは型がXMLListなんだろ?
それをStringで返そうとすりゃundefinedにもなると思うお
>>62
せめてもうちょいヒントになる事教えないとw 申し訳ない、打ち間違えてましたね
例に出すために追加した方で間違えてたら世話ないな
return とかの部分は割とどうでもよくて、xml.filename.(text()==hoge)の部分が
swith文の外だと抽出出来るのに、中だとundefinedになっちゃうんですよね
こういう仕様なのかなぁと _filename はメンバ変数?
定義してると書いてみ あー わかった こうじゃねえのか?
_filelist = xml.filename.(text() ==_name);
ただの凡ミスじゃねえか 気が付かなかった方も悪いがw ASはじめてみようかと思って、flashdevelop落として
書き始めたらいきなり詰まった・・・orz
bitmapクラス(?)で画像ファイル読み込んで表示するだけ
のつもりが、結果には真っ白な画面しか出てこなくて、
ファイル読み込みとかされてないみたいです。
何かコーディング間違ってるところがあるのでしょうか?
ご教授ください。
package
{
import flash.display.Sprite;
public class NewClass extends Sprite
{
[Embed(source="Blue hills.jpg")] private var imgHaikei:Class;
public function Main()
{
//背景の登録
addChild(new imgHaikei);
}
}
} addChild(new imgHaikei);
を
addChild(new imgHaikei());
に >>69
ありがとうございます。
以下のようにしてみましたが、状態は変わらず。
真っ白な画面だけが表示されただけでした。
package
{
import flash.display.Sprite;
public class NewClass2 extends Sprite
{
[Embed(source="Blue hills.jpg")] private var imgHaikei:Class;
public function Main():void
{
//背景の登録
addChild(new imgHaikei());
}
}
} 根本的なところを見落としていた。
package
{
import flash.display.Sprite;
public class Main extends Sprite
{
[Embed(source="Blue hills.jpg")] private var imgHaikei:Class;
public function Main()
{
//背景の登録
addChild(new imgHaikei());
}
}
}
コンストラクタ名はクラス名と同じじゃないといけない。戻り値は返さないので:voidはいらない。
というかflashdevelopはこれでエラーにならないのか 表示されたー!
ありがとう、ありがとう
ちなみに前のソースでもビルドの時は全くエラー返されなかったから
名称とか構文辺りは問題ないものかと思ってた。
やっとこれで前に進めます・・・感謝です。 >>67
申し訳ないそっちも打ち間違いです・・・。代入される側もXMLListです
一旦帰ってソース見直したら、ローカル変数の宣言自体がswitch内だったので、
これをswitch外に出すとちゃんと抽出出来るようになりました。お騒がせしました。
ヘタな例書くくらいならちゃんと全部書かないとダメですね・・・
switch (hoge){
case "hoge":
var _filelist:XMLList = xml.filename.(text() == "hogehoge");
break;
}
↓
var _filelist:XMLList;
switch (hoge){
case "hoge":
_filelist = xml.filename.(text() == "hogehoge");
break;
} Win7,FlashCS5,AS3使用。
Spiteの実際の描画領域の位置と大きさを求めたいです。 例えば下記の場合、
┌ ┐
■
└ ┘
「」で囲んだ大きさ(Spite自体の大きさ)は直ぐに求まりますが、正味の描画領域
である■のSpite内での位置とサイズが分かりません。
方法としては、ビットマップ化してその大きさで求めたりしたのですが正しい値が
得られませんでした。
どんな方法が考えられますでしょうか? イマイチわからんがエスパー回答しちゃうお
不特定の画像もしくはシンボルをそこにロードするんなら 一旦空のMCにロードしてそのMCのサイズを求める
手書きのベクター絵等なら観念して最初からMCにする
具体的に何を作ろうとしてるのかわからんから今んとここれくらいだお >>76
どうも。 対象はキャンバスMC(またはSpraite)でのパスを繋げた形の手書き絵です。
例えば「つ」と書いたとき左端の始点から右の弧の頂点までが幅になるという感じです。 どうなんだろ 試した事無いんで予想回答
キャンバスMC内に空のMCを設置して描画は空MC内で行う
ロールアウト、マウスアウト、マウスアップ時にその都度空MCのサイズを取得 (自己レス)素直に オブジェクト.getBounds(オブジェクトのコンテナ) でOKでした 初歩的な質問なんだけどおながいします。テーマは深度。ASは1.0かな。
onClipEvent (enterFrame) {
if (this.hitTest(_root.b)) {this.swapDepths(2);
} else {this.swapDepths(-2);}
}
って感じで、当たれば深度を2に上げて、離れると戻すってものを書いたんだけど、
上がるのはいいんだけど離れても戻らないんす。
どーすればいいのか分からんちん>< hakuhinさんより
>深度のマイナス値は、システムで使われる領域と考えられます。
だってお
とりあえずハクヒンさんとこ見てもわからなかったらまたカキコしてくれ
ttp://hakuhin.jp/as.html 自己解決した(と思う)。
onClipEvent (enterFrame) {
if (this.hitTest(_root.b))
{this.swapDepths(+1);
} else {
this.swapDepths(-1);
a.swapDepths(b);
}
}
a.swapDepths(b)を追加して、+1にしたら正常に動いた。
>82はもちろんとっくに見てて、的外れレスかと思ったけどヒントがあったw
複数個置く場合はうまく行かなくなるので、elseのあとを0、1、2という感じで変える必要があった。
01.02.03のシンボルがあったとすると、01のシンボルが動作後に階層1に収まり、02は2…という感じで
絶対的な深度に戻す感じ。
説明が難しいけど、深度ってレイヤーと関係ないから1シンボルあたり1深度なのね。
だから絶対深度と相対深度をうまく組み合わせないと綺麗に動かんという。
システムで使うというのはよく分からないけど、できるだけプラス方向にした方がいいみたい。 AS1.0で、カーソルに追従するようにしたムービークリップがどうしても動かない。
普段は歩いて、カーソルが一定以上離れたら走るようにしたいんだけど、走る動きが止まる。
試しに走る方と歩くほうのラベル記述を入れ替えてみたら、今度は歩くほうが止まる。
でもボタンでフレームラベルを移動するようにして動作確認すると動く。
「_xmouse、_ymouse」には何かしらのバグがあるんか? エスパー先生が降臨して回答してくれるのを待つしかねえなw はい。作ったファイルはこれ(パスは 1234 )
ttp://www.dotup.org/uploda/www.dotup.org4973408.zip.html ほらよ 変えたのはエンターフレーム内のコードだけだお
色々基本が足りん がんがれ
if( this._x < _root._xmouse ){//右方向
if( this._x+150 < _root._xmouse ){
this.gotoAndStop("runright");
this._x += 3;
}else{
this.gotoAndStop("walkright");
this._x += 0.5;
}
}else{//左方向
if( this._x-150 > _root._xmouse ){
this.gotoAndStop("runleft");
this._x -= 3;
}else{
this.gotoAndStop("walkleft");
this._x -= 0.5;
}
} >>87
うおー!!すげぇありがとう!!!ばっちりです
ifの中にifを入れるのは分かるんだけど、なんでmcが動かなかったんだろ? 毎フレーム ラベルを行き来してたんじゃね?
歩きアニメの2フレーム目へ行くはずが他のラベルへ飛んでまた戻る… の繰り返しで
ず〜っと1フレーム目しか表示できず止まったように見えたんだお あー違う 単に毎フレーム gotoAnd〜 をすると
goto先のフレームに配置してあるMC内のフレームは動かないんだ
その都度1フレームから始まる …でず〜っと動かなかったと Windows FlashCS6 AS3で音楽再生Flashを作っていて「1曲目が終わったら次のフレームへ」ってやりたいのですが
sound.onSoundComplete = function(){
gotoAndPlay(2);
}
と記述したのですが1119: 未定義である可能性が高いプロパティ onSoundComplete に静的型 flash.media:Sound の参照を使用してアクセスしています。
と、言われてしまいました
var sndCh:SoundChannel;
var sound:Sound = new test();
var pause_point:Number = 0;
var a:int = 1;
どうすれば音楽が終わったら次のフレームに移動できるでしょうか… sound.addEventListener(Event.SOUND_COMPLETE, function (e:Event) : void {
gotoAndPlay(2);
}); 嘘つきました。こっちです
sndCh = sound.play();
sndCh.addEventListener(Event.SOUND_COMPLETE, function (e:Event) : void {
gotoAndPlay(2);
}); >>94
ありがとうございます!!
onSoundCompleteしか頭に無かったのですがそういう風にイベントで定義してあげればよかったんですね。
本当にありがとうございました。勉強になりました 自分が開発中のアプリで使ってるmx.controls.ComboBoxをクリックすると
[Fault] exception, 情報=ReferenceError: Error #1069: flash.display.Stage にプロパティ softKeyboardRect が見つからず、デフォルト値もありません。
ってエラーが出るのですが何が原因かわかりません。誰か教えてください。 mx.controls.ComboBox なんてあったか? Flex? as3の質問です
再帰関数を使った繰り返しの処理をしたらスタックオーバーフローしてしまいました
調べてみると
1.再帰関数に適切な終了条件をつけていない
2.ローカル変数の使いすぎでスタックを使い切ってしまう
とありました
試しに新しいプロジェクトで同じ再帰関数を使った処理をだけをしたら問題なく動いたので
おそらく2のローカル変数の使いすぎが原因だと思います
ローカル変数をなるべく使わないように工夫をしてもオーバーフローしてしまいました
そこで質問なのですが、使用できるスタックをより多く確保することはできますか?
それができない場合、再帰関数に代わる他の繰り返し処理はどんなものがあるのか教えてください
forループは一瞬で処理されてしまうので期待した挙動ができませんでした
期待した挙動というのはこのプログラムの、クリックした場所に丸が動くというものです
http://shin-ishimaru.cocolog-nifty.com/blog/2008/10/aactionscript30.html
丸の移動にTweenerを使い再帰関数で処理をしているため、for文で代用しても一瞬で処理されてしまい
徐々に動くという挙動ができません forループでsettimeout使うとか、先に経路だけ計算しといてあとでtweener使うとか
方法はいろいろある ■ このスレッドは過去ログ倉庫に格納されています