No.3ベストアンサー
- 回答日時:
#1&#2 です。
すみません,返事が遅くなりました。
ものすごく難しいです。
かなり,あがきましたが,
#2の補足に書かれている "ような" 内容のことは不可能だと思います。
なぜかというと,
「携帯によって,キーを押したときの仕様が違う。」
と言うのが第一点で,もう1つは
「キーアップを感知できない。」
という点です。
また,Flash Lite 1.1 までは,Keyクラスのメソッドもありません。
別コミュニティからの引用でもし訳ございませんが,
とりあえず下のURLを参照してください。
~~~~~~~~~~~~~~~~~~
「FLASH-JP.COM - フォーラム」
【Flash Lite】keyPressについて
http://www.flash-jp.com/modules/newbb/viewtopic. …
---質問者の ebi さん投稿より引用 ---
keyPressイベントハンドラは
ボタンを押してる限り何度も実行しちゃいますが、
1度ボタンを押したら指を離すまで
キーイベントを受け取らないって事は可能でしょうか?
---回答(補足) ebi さん発言より引用---
うちはテスト用の実機としてDoCoMoはF700i、P506iC、
AUはW22SAがあるんですが(テストしたい方、使って下さい)
DoCoMoはリピートしませんが、AUはするんです。
~~~~~~~~~~~~~~~~~~
まず,質問は,
「ボタンを押してる限り何度も実行するので困る」
という内容です。
これだけから考えると,そもそも enterFrame は必要ないということです。
キーを押し続けると,何度もそのキーが押されたのと同じ状態になるそうです。
つまり,PCと同じです。
まず,動かしたいムービークリップにインスタンス名を付けます。
ここの説明では,「myMC」 というインスタンス名を付けたとしておきます。
そして,ステージ上にボタン(ボタンシンボル)を4つ作って,
各ボタンに次のように書けば,「myMC」 はキー操作で動きます。
---1つめボタン------------------------------
on (press, keyPress "8") {
setProperty("/myMC", _y, getProperty("/myMC", _y)-5);
}
------------------------------------------
---2つめボタン------------------------------
on (press, keyPress "2") {
setProperty("/myMC", _y, getProperty("/myMC", _y)+5);
}
------------------------------------------
---3つめボタン------------------------------
on (press, keyPress "6") {
setProperty("/myMC", _x, getProperty("/myMC", _x)+5);
}
------------------------------------------
---4つめボタン------------------------------
on (press, keyPress "4") {
setProperty("/myMC", _x, getProperty("/myMC", _x)-5);
}
------------------------------------------
Flash Lite 的にはこれでOKです。
またPCでも,enterFrameは使わず上のようにするので良いと思います。
ところが,
回答の方を見ると,
「DoCoMoはリピートしませんが、AUはするんです。」
ということらしいです。 リピートしない機種もあるんですね。
たしかに,
http://www.nttdocomo.co.jp/service/imode/make/co …
からダウンロードできる『iモードHTMLシミュレータII』をダウンロードしてみましたが,リピートはしません。
そうすると,
on (press, keyPress "8") などで,変数のフラグを立てて,
その変数の値によって,enterFrame で(つまりフレームのループで)上下左右に動かす方法を取るしかなくなります(おそらく)。
それは良いのですが,
困ったことにキーをアップしたときに,フラグの値を変えるということができないのですよ。
というわけで,
#2の補足に書かれている "ような" 内容のことは不可能だと思いますが,
以下で代用はできませんでしょうか?
キー5 を押して,ムービークリップの動きを止める方法です。
まずステージ上にボタン(ボタンシンボル)を5つ作って,
各ボタンに次のように書けきます。押すキーによって,_root の変数 flag の値を変えます。
(ボタンが見えては困る場合は透明なボタンなどにしてください。)
---1つめボタン------------------------------
on (press, keyPress "8") {
flag = 8;
}
------------------------------------------
---2つめボタン------------------------------
on (press, keyPress "2") {
flag = 2;
}
------------------------------------------
---3つめボタン------------------------------
on (press, keyPress "6") {
flag = 6;
}
------------------------------------------
---4つめボタン------------------------------
on (press, keyPress "4") {
flag = 4;
}
------------------------------------------
---5つめボタン------------------------------
on (press, keyPress "5") {
flag = 5;
}
------------------------------------------
そして,動かしたいムービークリップの中のフレーム1に次のように書きます。
------------------------------------------
if (/:flag == 8) {
setProperty("", _y, getProperty("", _y)-5);
} else if (/:flag == 2) {
setProperty("", _y, getProperty("", _y)+5);
}else if (/:flag == 6) {
setProperty("", _x, getProperty("", _x)+5);
}else if (/:flag == 4) {
setProperty("", _x, getProperty("", _x)-5);
}
------------------------------------------
そして,動かしたいムービークリップの中のフレーム2をキーフレームにして次のように書きます。
------------------------------------------
gotoAndPlay(1);
------------------------------------------
本当は,キーから指を離したときに,
ムービークリップがストップしてくれれば良いのですが,
どうあがいても無理でした。
ムービークリップ 内に ボタンを配置して,
ボタンを消したり出したり繰り返すのもしてみましたが,うまく行きませんでした。
というわけで,キー5 を増やす代案です。
=== 補足 =========================
「#2の補足に書かれている "ような" 内容のことは…」
と "ような" を強調しているのは,
#2の補足に書かれているスクリプトでは,Flash Lite どころか,
普通のFlashも動かないからです (゜-゜;)ヾ(-_-;) オイオイ... 。
書かれているスクリプトで普通の Flash を動かす場合の話です。
on(release, keyPress "8"){ } などは,
Flash 5 以前だとボタンのみ,Flash MX 以降だと ボタン と ムービークリップ の スクリプトの冒頭だけに使える onイベントハンドラ と呼ばれる特殊なものです。
http://f-site.org/articles/2002/01/26154029.html
ですから,if文の中などには使えません。
普通の Flash の場合は,
ムービークリップを作って,
そのムービークリップに次のようなスクリプトを書くと動作すると思います。
-----------------------------------------
onClipEvent (enterFrame) {
// ※キーコード:キー0=96,キー1=97,…
if (Key.isDown(104)) {
_y -= 5;
} else if (Key.isDown(98)) {
_y += 5;
} else if (Key.isDown(102)) {
_x += 5;
} else if (Key.isDown(100)) {
_x -= 5;
}
}
-----------------------------------------
また,
ムービークリップ内のフレームを2フレームにして,1フレーム目に,
-----------------------------------------
if (Key.isDown(104)) {
_y -= 5;
} else if (Key.isDown(98)) {
_y += 5;
} else if (Key.isDown(102)) {
_x += 5;
} else if (Key.isDown(100)) {
_x -= 5;
}
-----------------------------------------
と書いても良いですよ。
以上です。
その他参考URL
i モード用 Flash 開発講座
http://www.adobe.com/jp/devnet/devices/articles/ …
いやぁ…他のフォーラムにまで、お調べになられたようで…、なんとお礼申し上げてよいか分かりません。本当に有難う御座います。^^;
同じ携帯でも、違う反応を返すんですね。初めて知りました。
>#2の補足に書かれているスクリプトでは,Flash Lite どころか,
>普通のFlashも動かないからです (゜-゜;)ヾ(-_-;) オイオイ... 。
本当にオイオイですね(苦笑)ActionScriptの参考書でも買って、勉強しなきゃいけませんね。
本当にいつも,sassakunさまにはお世話になってますね(^^;
また機会がありましたら、教えていただけると幸いです。
(厚かましいお願いではございますが)
No.2
- 回答日時:
#1です。
具体的なスクリプトを書かれていないので,
#1では一般的なことしか書いていません。
ですから,その勝手な補足で恐縮ですが,
簡単な例(サンプル)を書かせていただきます。
ステージ上に,小さな四角を描いたとします。
その四角をムービークリップに変換して,そのムービークリップに,
---------------------
onClipEvent (enterFrame) {
this._x += 3;
}
---------------------
と書いてパブリッシュしたとします。
するとそのムービークリップの x座標は,
onClipEvent (enterFrame) で,
1フレーム進む時間ごとに毎回
(デフォルトのフレームレート12fpsでは1秒間に12回),
3 ずつ加算されるので,
this つまり,自分自身のムービークリップの座標を 3ピクセル ずつ右に移動するムービークリップができます(よね)。
それを,
Flash Lite 1.1 で実現しようと思えば,
ステージ上に描いた,小さな四角をムービークリップシンボルに変換して,
その ムービークリップ を ダブルクリック して,
その ムービークリップ のタイムラインの編集に入り,
ムービークリップ 内のフレームを 2フレームにして,
1フレーム目に
-----------------------------------------
setProperty("", _x, getProperty("", _x)+3);
-----------------------------------------
そして,2フレーム目もキーフレームにして,そのフレームに,
----------------------------------------
gotoAndPlay(1);
----------------------------------------
と書くと,
onClipEvent (enterFrame) とほとんど同じ事が実現可能です。
と言うことです。
前回のご質問でも書いたとおり,
Flash Lite 1.1 以前では,
動詞が先に来ます。
また,
スクリプトはクラスを持たずに単独のスクリプトとして存在します。
ムービークリップ内の1フレーム目に書いたスクリプトですが,
まず,
getProperty("", _x)
で自分自身の x座標を取得しています。
階層は存在していて,
自分自身の階層(ムービークリップ)を指すターゲットパスは,「無」になります。
ですから,
getProperty("", _x) は, getProperty("this", _x) と同じ意味になります。
まず,その getProperty("", _x) で,自分自身の x座標プロパティを取得しておいて,
getProperty("", _x)+3
で,取得した x座標に 3 を加算するということになります。
その, getProperty("", _x)+3 の値を持って,
setProperty();
で,ターゲットとなるムービークリップの x座標プロパティを セット するのです。
ですから,
setProperty("", _x, getProperty("", _x)+3);
は, this._x += 3; つまり, this._x = this._x + 3; と同じ意味になります。
そして,フレーム2 で
gotoAndPlay(1);
があるので,1フレーム目と2フレーム目はループするので,
繰り返し,1フレーム目のスクリプトが 1フレーム進む時間ごとに毎回 実行されることになります。
何というか…
私は,フレームのループという発想が先にあって,
それでは面倒くさいので onClipEvent (enterFrame) を使うという思考パターンになってしまっています。
ですから,onClipEvent (enterFrame) イコール ムービークリップのループなのです。
実際にその経緯で onClipEvent (enterFrame) は Flash 5 からできたのだと思います。
それはともかく,
Flash Lite 1.1 までは,
一貫して動詞が先にあって,オブジェクトはその引数またはターゲットの位置に来ます。
ですから,スクリプトが入れ子入れ子になって複雑になります。
やはり,
「オブジェクトが先に来る文法の方がスッキリしていいですね。」
という例としても回答させていただきました。
今,困られている実際のonClipEvent (enterFrame) を使った場合のスクリプトを書いてくださると,
具体的な回答ができるかもしれませんし,
また逆に,もし無理であることであれば,「それは Flash Lite 1.1 まででは無理だ」ということも書けるかもしれません。
何でしたら,補足してください。答えられるかもしれません(答えられないかもしれませんが)。
この回答への補足
sassakunさん、いつも有難う御座います^^
具体的には、あるMCを携帯電話の2キーを押したら上に、4キーを押したら下に行く、ということをやりたいんです。以下、初心者の発想ですので、お見苦しい所もあるかと思いますが^^;MCを2フレーム作って、1フレーム目に以下のスクリプトを書き、2フレーム目にgotoAndStop(1);を記述しました。
-------------------------------------------
if (on(release, keyPress "8")){
_y -= 5;
} else if(on(release, keyPress "2")) {
_y += 5;
} else if(on(release, keyPress "6")) {
_x += 5;
} else if (on(release, keyPress "4")) {
_x -= 5;
}
-------------------------------------------
しかしFlashさんに大量のエラー文を吐かれてしまいました。何か根本的に勉強不足のようですね。^^;
No.1
- 回答日時:
ムービークリップを1つ作って,
そのムービークリップ内のフレームを2フレームにして,
1フレーム目のフレームにスクリプトを書きます。
2フレーム目は特に何も書かなくても良いですが,
gotoAndPlay(1);
と書いておく方がonClipEvent(enterFrame)に近い動きをします。
結局,onClipEvent(enterFrame) はそれの代用としてできたものです。
だから,enterFrame は基本的にムービークリップのスクリプトなのです。
いまでもよく,「NowLoading」のサンプルなどで,
ムービークリップ内のタイムラインや,_root のタイムラインをループさせるのを見かけますが,
根本的発想は全て,ムービークリップ内のタイムラインをループさせるところにあります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- ホームページ作成・プログラミング Adobe FLASH に代わるソフトはありますか? 4 2022/09/27 19:35
- マルウェア・コンピュータウイルス FlashPlayerの削除とマルウェア感染について 5 2023/02/23 20:52
- Flash 私のコンピューター上のファイルが開けられない。 1 2022/07/19 18:15
- Windows 10 Windows11タスクバーやエクスプローラー、スタートメニュー 動画全画面時にカーソルが見えない 1 2022/04/08 00:03
- 格安スマホ・SIMフリースマホ おすすめのキャリアを教えてください。 2 2022/11/13 21:00
- 魚類 【アクアリウム】苔の対処についての相談 1 2022/09/07 09:43
- 工学 ちなみになぜv=(v・e1)e1+(v・e2)e2はe1やe2が、正規直交基底でないと成り立たないと 2 2022/12/22 17:22
- 日本語 一旦と一端、交替と交代の区別 6 2022/05/13 14:49
- ノートパソコン ノートパソコン液晶割れの修理 1 2022/04/30 18:53
- 邦楽 軍歌?「西に入り日は おち染めて」という歌詞がある歌の名前を教えてください。 1 2023/03/18 04:34
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ダウンロードしたデジブックはa...
-
スマホでサイトの画像を長押し→...
-
AS3 MC内ボタンクリックでシー...
-
FLASHでゲームを作っていた人は...
-
この曲はなんでしょう?
-
laptop go2からの買い替え、lap...
-
スクリップト
-
私のコンピューター上のファイ...
-
arduino プログラムについて
-
chrome flash
-
FLASHの再生はできないのでしょ...
-
フラッシュゲームアーカイブ2
-
ウェブサイトで Flash が事実上...
-
Flashコンテンツを使ったWebサイト
-
Flash Playerのサポートが終了
-
Form内のselectを連動させるに...
-
Flashをブロックしないで
-
ad or script について
-
Flashplayerの運用について
-
VBAのコンボボックスの年月表示...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画面全体にマスク
-
FLASHムービーのファイルをつな...
-
ページ移動する間にMCのアクシ...
-
スライドの表示時間(8 profe...
-
ロールオーバーと逆の動き
-
ステレオのボリュームのような...
-
loadMovieで・・・
-
ボタンの動作について
-
パブリッシュで左端が切れます
-
円を描くように動くアニメーシ...
-
◆◆クイズ・ゲームのスコアを集...
-
ページの切り替えのフェードイ...
-
Flashに詳しい方お願いします…
-
フレーム内に移動したい
-
phpで音を鳴らす
-
フレーム内のオプションボタン...
-
Access2010でサブフォームのフ...
-
車の運転時のメガネ 縁なし(...
-
ドロップフレームの計算をエク...
-
フレームでのResponse.Redirect
おすすめ情報