人に聞けない痔の悩み、これでスッキリ >>

Windows XP SP2
FLASH MX 2004を使用しております。

ダイナミックテキストのインスタンス名をmessage_txtとして

this.message_txt.text = "数字を入力してからボタンを押す。";

とスクリプトを書くと横幅が足らない場合、勝手に改行されます。
自分で任意で改行させて下記のように表示させるにはどうすればよいのでしょうか?

<このように表示させたい>
数字を入力してから
ボタンを押す。

<現状>
数字を入力してからボタ
ンを押す。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

書かれているサンプルの場合,



this.message_txt.text = "数字を入力してから" + newline + "ボタンを押す。";

でうまく行くといます。newlineがキャリッジリターン(改行コード)です。
こちらは良い参考URLが見つかりませんでした。ヘルプあたりには少し書いてあります。

また,外部テキストの1行テキストデータに改行を入れる場合,外部テキストデータは,

message_txt=数字を入力してから%0Dボタンを押す。

とします。
こちらの参考URLは
http://www.macromedia.com/jp/support/flash/ts/do …
http://hima.chu.jp/flash/tips/shiftjis.htm
です。

参考URL:http://www.macromedia.com/jp/support/flash/ts/documents/fl0159.html,http://hima.chu.jp/flash/tips/shiftjis.htm
    • good
    • 0
この回答へのお礼

this.message_txt.text = "数字を入力してから" + newline + "ボタンを押す。";

上記を試したところ改行することができました。
また、外部テキストデータも問題なく表示することができました。

ご回答いただきどうもありがとうございました。

お礼日時:2005/05/06 00:22

Flash 5 以降の文法では、C言語や Java と同様に、改行のエスケープシーケンス”\n”で、改行を文字列の中に直接挿入できます。


ご質問文の例ですと、


 this.message_txt.text = "数字を入力してから\nボタンを押す。";


となります。
ActionScript では、\n の代わりに \r でも、同様の動作になります。

ただし、外部テキストから読み込む時は、\n が改行と解釈されず、”\n”という文字列として扱われてしまいます。
#1の方と重なりますが、外部から改行を入れたテキストを読み込むには、改行を表す URL エンコードの %0A か %0D を入れます。

-------------------------------------

ワープロやテキストの入力フォームなど文章を入力する場面では、Enter キーを押して改行すると、行が変わると同時にカーソルが行の先頭に移動します。
改行といえばこのような動作として、普段は気にしないものですが、よく考えてみるとこの動作は、行を変える動作(改行)と、カーソルを行頭に移動させる動作(復帰)という、2つの動作から成り立っています。
プログラムを考える時は、この細かい違いも考慮しなければならない場合もあります。


テキストファイルに記録する時、文字はいろいろな数字(コード)に変換されて記録されます。
改行もコードに変換して記録されているのですが、厳密には、行を変える”ラインフィード”( LF : ASCII コードでは 0x0A )とカーソルを行の先頭に持ってくる”キャリッジリターン”( CR : ASCII コードでは 0x0D )という、2つのコードから成り立っています。

テキストを扱い方は、改行のコード LF または復帰の CR 1つでいわゆる改行と見なす処理体系と、LF + CR の2文字で改行の動作と解釈する体系に分かれています。
また、テキストを記録する際に、コードに直す時のルール(エンコード)にも様々な種類があり、改行の動作を LF か CR 1つだけで記録する体系もあれば、従来通り LF + CR で入れる体系もあります。
テキストファイルを作る時は、処理体系がどのように改行を解釈するか、その方針に合わせた改行コードに変換するエンコードで書き出す必要があります。

Flash の ActionScript は、1文字で改行と見す体系に当たります。
しかも、LF と CR どちらも改行と見なしてくれるという、かなり融通の利く設計になっています。
(ちなみに、スクリプトでは \n または \r 、外部テキストでは %0A または %0D のどちらでも改行として解釈される理由は、このためです)
しかし、例えばテキストファイルに、改行をコードではなくキーボードの Enter キーで改行して記述すると、改行は読み込めるのですが、2回改行されて1行間が空く(目的の改行+空行)場合があります。
これはおそらく、テキストファイルに改行のためのコードとして 0x0A と 0x0D の2つが記録され、改行が2つ入っているものと解釈されているためと思われます。


改行に限らず、特殊な文字が入ったテキストを読み込む時は、URL エンコードを利用した方が無難です。
その他の特殊文字のコードについては、下記のページをご参考になさってください。

 ・URL エンコーディング: テキストファイルからの特殊文字の読み込み
  http://www.macromedia.com/jp/support/flash/ts/do …
    • good
    • 0
この回答へのお礼

newline 以外にも \n、\r で改行ができることがわかり勉強になりました。

ご回答いただきどうもありがとうございました。

お礼日時:2005/05/06 00:26

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAS3.0 ダイナミックテキストの変数について

現在AS3.0で開発を行っています。
AS3.0は初心者です。

テキストツールを使用し、ステージ上に描画したダイナミックテキストの変数はどのように指定すればいいのでしょうか?

AS2.0ではプロパティタブに「変数」の記述欄があり、そこに記述していたのですが、AS3.0は記述できなくなっていて悩んでいます。

ご教授頂けると幸いです。
よろしくお願い致します。

Aベストアンサー

AS3.0でもそのダイナミックテキストをクリックすると
プロパティーにダイナミックテキスト、静止テキストなどを
偉ぶ欄の下に変数をいれるフィールドがあると思います。
そこにいれてあげると大丈夫です。


testTextと記述、スクリプトで
testText.text = "テストです。";
と記述すればできると思います。

QgotoAndPlayで反応がありません。

 ムービークリップ内のボタン(ボタンは複数存在しています)[プルダウンメニューを作成しました]に対して、
on (release) {
gotoAndPlay("フレーム番号");
}
と記述し、フレーム移動をさせようとしたのですが、
反応がありません。
Flashを使い始めてまだ間もなく、アクションスクリプトも初心者です。
フレームアクションは、キーフレームに設定しないといけないと参考書に書いてあったのですが、そうするとムービークリップ内のボタンには、gotoAndPlayの使用はまちがっているのでしょうか?

フレームアクションではないのですが、同じ部分に
on (release) {
getURL("**.html");
}
と記述すると問題がなく動きます。

過去の質問も読んでみたのですが、どの質問が自分の疑問に当てはまるかよくわかりません。
どなたかご教授願います。

以上の文章で理解しにくければ、追記致します。

Aベストアンサー

いくつか原因が考えられますが、1番怪しいのは移動先の指定の仕方です。
gotoAndPlay または gotoAndStop で、移動先をフレームの番号で指定する時は、

 gotoAndPlay( 2 );

このように、数字を " " でくくらずに記述します。
" " でくくってもエラーにならないのはなぜかと言いますと。

 gotoAndPlay( "menu_item1" );

このように指定すると、”menu_item1”というフレームラベルを持つフレームに移動、という意味になります。
つまり、" "でくくっても文法上は誤りではないのでエラーにはならないのですが、「 2 」というフレームラベルを持つフレームがない時はフレームの移動が正常に行われません。

Flash MX か MX 2004 をお使いの場合は、フレームを選択した状態で、「プロパティ」パネルを見てください。
左上の方に、<フレームラベル>と書かれている項目があるかと思います。
ここで何か名前を入力すると、選択したフレームに名前が付きます。この名前のことを”フレームラベル”といいます。

フレームラベルは gotoAndPlay や gotoAndStop の移動先として利用できます。
例えばゲームを作っていて、フレーム2からゲームが始まるとします。
フレーム2に”game_start”というフレームラベルを付けると、

 gotoAndPlay( 2 );



 gotoAndPlay( "game_start" );

は、同じ意味になります。
フレームを追加したなどの理由でゲームの始まりがフレーム2からではなくなった場合、フレーム番号を直接指定していた場合は、番号を書き直さなければなりません。
しかし、フレームラベルで指定していれば、フレームが移動しても、そのフレームとともにラベルも移動するので、スクリプトを直さなくても済みます。


もう1つの原因として考えられるのは、ボタンをムービークリップとして作っている場合です。
Flash MX からは、ムービークリップをボタンと同じように使えるようになりました。
が、ボタンとして使っているムービークリップに

 on(release)
 {
  gotoAndPlay( 2 );
 }

というアクションを書くと、ボタン用のムービークリップのフレーム2に移動する、という意味になります。
「プロパティ」パネルで、タイプを確認してみてください。左上の方にリストがありますが、ここが「ボタン」ではなく「ムービークリップ」になっている場合は、

 on(release)
 {
  _parent.gotoAndPlay( 2 );
 }

というように、gotoAndPlay の前に”_parent.”という記述が必要です。


ActionScript を設定できる場所は、

 ・タイムラインのフレーム(キーフレームが必要)
 ・ボタンのインスタンス
 ・ムービークリップのインスタンス

この3箇所です。
フレームに設定するアクションを”フレームアクション”、ボタンやムービークリップのインスタンスに設定するアクションを”オブジェクトアクション”といいます。
gotoAndPlay はフレームを移動するアクションですが、だからといって”フレームアクション”というのではありません。ボタンやムービークリップにも設定できます。

いくつか原因が考えられますが、1番怪しいのは移動先の指定の仕方です。
gotoAndPlay または gotoAndStop で、移動先をフレームの番号で指定する時は、

 gotoAndPlay( 2 );

このように、数字を " " でくくらずに記述します。
" " でくくってもエラーにならないのはなぜかと言いますと。

 gotoAndPlay( "menu_item1" );

このように指定すると、”menu_item1”というフレームラベルを持つフレームに移動、という意味になります。
つまり、" "でくくっても文法上は誤りではないのでエラーにはならな...続きを読む

QAS3の変数宣言で、変数名+00や01など変更しながら使いたい

ActionScript3.0でnew演算子などで
変数(例えばobj)などを宣言する際に
ある条件ならobj00、またある条件ならobj01
など条件に合わせて最後の2文字を変更したいです。
bnという変数に条件に従って00や01を代入して
以下のように作りましたがうまくいかないです。
▼00の場合
var bn:String = "00";
var "obj"+bn: Loader = new Loader();
分かる方は教えて下さい。宜しくお願いします。

Aベストアンサー

#1 です。

> ReferenceError: Error #1056: Upload のプロパティ obj00 を作成できません。
> と表示されてしまいます。


例えばファイルの構造を次のようにして,

 任意のフォルダ
    ├名称未設定-1.fla (ファイル名は何でも良いです)
    └00.jpg

「名称未設定-1.fla」 のフレーム1
------------------------------------
var bn:String="00";
this["obj"+bn] = new Loader();

this["obj"+bn].load(new URLRequest(bn+".jpg"));

addChild(this["obj"+bn]);
------------------------------------

そして 「制御」→「ムービープレビュー」。

何のエラーもなくパブリッシュ&動作検証できますよ。


クラスファイルの中とか,
書く場所などの条件が関係するのではないでしょうか。
「this」 は場合によって変わります。

#1 です。

> ReferenceError: Error #1056: Upload のプロパティ obj00 を作成できません。
> と表示されてしまいます。


例えばファイルの構造を次のようにして,

 任意のフォルダ
    ├名称未設定-1.fla (ファイル名は何でも良いです)
    └00.jpg

「名称未設定-1.fla」 のフレーム1
------------------------------------
var bn:String="00";
this["obj"+bn] = new Loader();

this["obj"+bn].load(new URLRequest(bn+".jpg"));

addChild(this["obj"+bn]);
-------------...続きを読む

QTextFieldで、文字の大きさや色を変えたいAC3・Flash

ActionScript3.0で、
TextFieldに表示される文字の大きさや色を変えたいです。
現在、下記のように記載して、文字を表示させていますが、
いくらネットや本で調べても、文字の大きさを変える方法が分かりませんでした。数時間以上調べました。

ぜひ教えてください!

var n:int=5;
var abc = new TextField();
stage.addChild(abc);

abc.border = false;
abc.x = 100;
abc.y = 60;
abc.width = 50;
abc.height = 50;

abc.htmlText =n;

たとえばこの場合5という数字が大きく表示されるようにしたいです。

よろしくお願いいたします!

Aベストアンサー

var n:int=5;
var abc = new TextField();
//ここからが追加
var format:TextFormat = new TextFormat();
format.size = 50;//フォントサイズを50に
abc.defaultTextFormat = format;
//ここまでが追加
stage.addChild(abc);
abc.border = false;
abc.x = 100
abc.y = 60;
abc.width = 50;
abc.height = 50;
abc.htmlText =n;


ヘルプのTextFormatを参照するとより詳しい説明があります。

Q#1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。

ただ今、下のようなflashを制作しています。
http://www.shoji-yuki.com/index.fla

ボタンをクリックすることで、ラベル『nwes』にフレームが移動するようにしたいのですが、

actionレイヤーの1フレーム目に
===
function go_news(btn1event){
this.gotoAndPlay("news");
}
news_btn.addEventListener(MouseEvent.CLICK,go_news);
===

また、45フレーム目に
===
this.stop();
===

と入力をしたのですが、

出力から
「TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。
at index_fla::MainTimeline/frame1()

と、メッセージがでてしまいます。



ネットで調べた所、インスタントが配置されていないのが問題とのことですが、イマイチ良くわかりません。ステージにシンボルを配置しているので、インスタントとして配置していると思います。


どなたか、良き解決方法をご教授ください。

===
flash cs4
action script 4.0

ただ今、下のようなflashを制作しています。
http://www.shoji-yuki.com/index.fla

ボタンをクリックすることで、ラベル『nwes』にフレームが移動するようにしたいのですが、

actionレイヤーの1フレーム目に
===
function go_news(btn1event){
this.gotoAndPlay("news");
}
news_btn.addEventListener(MouseEvent.CLICK,go_news);
===

また、45フレーム目に
===
this.stop();
===

と入力をしたのですが、

出力から
「TypeError: Error #1009: null のオブジェクト参照のプ...続きを読む

Aベストアンサー

そのnews_btnってインスタンス
1フレームじゃなく
途中のフレームに登場する
とかじゃないですか?

ムービークリップの途中のから登場するインスタンスは
そのフレームが再生されるまでアクセスできません

それもgotoAndStop()した直後でもだめです

フレームが再生され内容がステージに追加されて
初めてアクセスが可能になります

ので、1フレーム目の見えない所にインスタンスを置いておくとか
なんらかの対処が必要になってきます

Qクリックしたインスタンスを削除する方法

windows版FlashCS6で、ActionScript3を使用しております。
どうぞ、よろしくお願いいたします。

最初に、前提をご説明します。

埋め込みアセットクラスBoxをライブラリに準備します。
Boxの中には、50px × 50pxのビットマップが、基準点を中央で配置してあります。

埋め込みアセットクラスWallをライブラリに準備します。
Wallの中には、550px×400pxのビットマップが、基準点を中央で配置してあります。

ステージサイズは550px×400pxです。

タイムラインに、下記のActionScript3を書きます。

var myWall:Wall = new Wall();
myWall.x = 275;
myWall.y = 200;
addChild(myWall);

var myBox:Array = new Array(10);
for(var i:int=0 ; i<10 ; i++){
myBox[i] = new Box();
myBox[i].x = Math.random() * 550;
myBox[i].y = Math.random() * 400;
addChild(myBox[i]);
}

パブリッシュすると、ステージ上にはmyWallのインスタンスが1個と、myBoxのインスタンスが10個配置されます。

myBoxのインスタンスいずれかをクリックすると、クリックされたmyBoxが削除される(クリックされたmyBoxをremoveChild()し、それの参照を保存していた変数にnullを代入する)ようにするには、どのようにスクリプトを組めば良いでしょうか?

背景のmyWallは、クリックされても削除されないようにしたいです。

ご教示のほど、どうぞ、よろしくお願いいたします。

windows版FlashCS6で、ActionScript3を使用しております。
どうぞ、よろしくお願いいたします。

最初に、前提をご説明します。

埋め込みアセットクラスBoxをライブラリに準備します。
Boxの中には、50px × 50pxのビットマップが、基準点を中央で配置してあります。

埋め込みアセットクラスWallをライブラリに準備します。
Wallの中には、550px×400pxのビットマップが、基準点を中央で配置してあります。

ステージサイズは550px×400pxです。

タイムラインに、下記のActionScript3を書きます。

var myWall:Wal...続きを読む

Aベストアンサー

スクリプトとしてはとりあえず
次のような感じ↓で良いのではないでしょうか。


//====================================
var myWall:Wall = new Wall();
myWall.x = 275;
myWall.y = 200;
addChild(myWall);

var myBox:Array = new Array(10);
for (var i:int=0; i<10; i++) {
myBox[i] = new Box();
myBox[i].x = Math.random() * 550;
myBox[i].y = Math.random() * 400;
addChild(myBox[i]);
//------↓以降を追加変更↓------
//(各Boxマウスオーバーでハンドカーソルにする(要る?))
myBox[i].buttonMode = true;
//各Boxクリック時に関数 removeBox を実行
myBox[i].addEventListener(MouseEvent.CLICK,removeBox);
}

//関数 removeBox の定義
function removeBox(e:MouseEvent):void {
//クリックされたターゲットをこの階層の表示リストから削除
removeChild(DisplayObject(e.currentTarget));
}
//====================================





上記スクリプトの最後の部分↓ですが

//クリックされたターゲットをこの階層の表示リストから削除
removeChild(DisplayObject(e.currentTarget));

以下ではこの行についてのみの説明を書きます。


この最後の行は
次↓のように変更してもかまいません。

removeChild(Box(e.currentTarget));

または
Box クラスが MovieClip クラスを継承している場合は
次↓のように変更してもかまいません。

removeChild(MovieClip(e.currentTarget));


もし removeChild(e.currentTarget); のように
引数を「e.currentTarget」だけにした場合,
その「e.currentTarget」は
単なる「Object」クラスのインスタンスとして認識されてしまうため
removeChild(=表示リストから削除する) という命令を使うことができなくなります。
(「Object」クラスのインスタンスには,例えば「配列」や「関数」や「音」など "表示されないオブジェクト" も含まれるため「表示リストから削除する」という命令が通用しない。)

したがって少なくとも
クリックされたターゲットを "表示オブジェクト(DisplayObject)" として認識させる必要があります。

そのために
DisplayObject(e.currentTarget) のように書いて
イベントターゲットを「DisplayObject」に変換しているわけです。

MovieClipクラスも,Boxクラスも,
少なくとも DisplayObjectクラス は継承しているはずですから,
Box(e.currentTarget) や MovieClip(e.currentTarget) などにしてもかまわないということになります。


もし Box クラスが MovieClip クラスを継承していれば
クラスの継承関係は次のようになります。

Object > EventDispatcher > DisplayObject > InteractiveObject > DisplayObjectContainer > Sprite > MovieClip > Box

これらクラスのうち
DisplayObject 以下のクラスとして認識させれば removeChild できるという意味です。
認識させるクラスは作者の都合で適当に決めれば良いです。


ちなみに,
Array(配列) クラスであれば継承関係は次のようになります。
Object > Array

Function(関数/メソッド) クラスであれば継承関係は次のようになります。
Object > Function

Sound(音) クラスであれば継承関係は次のようになります。
Object > EventDispatcher > Sound

これら3つはどれも DisplayObject を継承していませんよね?

したがって
これらはどれも元から表示リストに加える(addChild する)ことができないので
表示リストから削除する(removeChild する)こともできないわけです。
(他にも DisplayObject でないオブジェクトはたくさん存在します。)



または,
別の書き方として次のように変更しても良いでしょう。

removeChild(e.currentTarget as DisplayObject);

removeChild(e.currentTarget as Box);

removeChild(e.currentTarget as MovieClip);

この「as」は ActionScript の略(=AS)ではなく,
英語の前置詞である「as (…として)」が語源でしょうね。

【英文例】I looked up to him as an engineer.
【和訳文】私は技術者として彼を尊敬している。

【Script】removeChild(e.currentTarget as DisplayObject);
【和訳文】表示オブジェクトとしてのイベントターゲットを表示リストから削除

スクリプトとしてはとりあえず
次のような感じ↓で良いのではないでしょうか。


//====================================
var myWall:Wall = new Wall();
myWall.x = 275;
myWall.y = 200;
addChild(myWall);

var myBox:Array = new Array(10);
for (var i:int=0; i<10; i++) {
myBox[i] = new Box();
myBox[i].x = Math.random() * 550;
myBox[i].y = Math.random() * 400;
addChild(myBox[i]);
//------↓以降を追加変更↓------
//(各Boxマウスオーバーでハンドカーソルにする(要る?))
myBox[i].buttonMode = t...続きを読む

Q[AS3]テキストファイルの存在確認

今、テキストファイルを外部から読み込んでその内容を表示するフラッシュをactionscript3.0で作っています。
ソースは以下のように、

import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLVariables;
import flash.events.Event;

var myLoader:URLLoader = new URLLoader();
var myRequest:URLRequest = new URLRequest("data.txt");
myLoader.addEventListener(Event.COMPLETE, onComplete);
myLoader.load(myRequest);
function onComplete (eventObject:Event) {
var my_str:String = eventObject.target.data
mytextfield.text=my_str
}

というう風にしているのですが、テキストファイルがサーバー上に存在しないと、このアドレスは存在しないといわれエラーを吐き出すのでファイルが存在するか確認してから、読み込みたいのですが何か良い方法はないでしょうか?
よろしくお願いします。

今、テキストファイルを外部から読み込んでその内容を表示するフラッシュをactionscript3.0で作っています。
ソースは以下のように、

import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLVariables;
import flash.events.Event;

var myLoader:URLLoader = new URLLoader();
var myRequest:URLRequest = new URLRequest("data.txt");
myLoader.addEventListener(Event.COMPLETE, onComplete);
myLoader.load(myRequest);
function onComplete (eventObject:Event) {
...続きを読む

Aベストアンサー

>ネットワークが故障していてエラーを出しても、
>ファイルが存在しなくてエラーを出しても、
>同じ扱いになるんですよね?

返ってくるIOErrorEvent.textの値でエラーの種類を判断することは可能です。
ファイルが存在しない場合は、"Error #2035: URL が見つかりません。"と返ってくるはずです。
参考URLにランタイムエラーがまとめてありますので、参考にしてみてください。ここに記載されている以外のエラーをFlashで取得しようとしても不可能です。

参考URL:http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/runtimeErrors.html

Qダイナミックテキストを装飾したいです!

テキストボックスからの入力にあわせて文字を画面に出力しています。(ダイナミックテキストです)
フォントをそのまま使用するのではなく、たとえば文字に縁取りを入れたり影をつけるなど、装飾を入れたいのですが、どうやったらよいか分かりません!
(ファイヤーワークスでいう「グロー」の効果などです)

静的フォントだったら凝ったつくりにできるのですが・・・

使用しているバージョンはMXとMX2004です。
どうぞよろしくお願いします

Aベストアンサー

基本的には出来ないと思いますが、装飾の種類によっては実現可能と思います。
例えば影でしたら、同じ変数を使って色を変えてずらして重ねれば影になるでしょうし、縁取りでしたら太さ、あるいは大きさを微妙に変えて重ねるとか。工夫次第では実現可能じゃないでしょうか?

凝ったものは難しいと思います。

QFLASHで、スクリプトによるシーンの切り替え

基本で申し訳ないです。
シーン1からシーン2に移り変わるようにするには
どういう指定をしたら良かったのか・・・
すみません、初歩的なんですけど、教えてください。
上手くいかなくて困っています。

Aベストアンサー

その「シーン 1」とか「シーン 2」とか言う物が,
勝手に定義したシーンではなく,
「挿入」→「シーン」から作ったちゃんとしたシーンであれば,

gotoAndPlay("シーン 2", 1);

で「シーン 2」 に行きます。
構文は,
gotoAndPlay("シーン名", フレーム数);
です。

ボタンに書くスクリプトでしたら,

on (release) {
gotoAndPlay("シーン 2", 1);
}

となります。
この「挿入」→「シーン」から作ったシーンですが,
シーンは全角カタカナ
そのあとに半角スペースが入って
半角の2になります。
ややこしければ上のをコピーしてください。

その他色々参考URL↓。
「シーン利用時の注意点」
http://homepage3.nifty.com/ginga-b/MX/scene.html
「ボタンを使ったコンテンツメニューを作る」
http://www.archi.ta.chiba-u.jp/content/campus/cad/flash/man/07_menu04.html

その「シーン 1」とか「シーン 2」とか言う物が,
勝手に定義したシーンではなく,
「挿入」→「シーン」から作ったちゃんとしたシーンであれば,

gotoAndPlay("シーン 2", 1);

で「シーン 2」 に行きます。
構文は,
gotoAndPlay("シーン名", フレーム数);
です。

ボタンに書くスクリプトでしたら,

on (release) {
gotoAndPlay("シーン 2", 1);
}

となります。
この「挿入」→「シーン」から作ったシーンですが,
シーンは全角カタカナ
そのあとに半角スペースが入って
半角の2にな...続きを読む

Q【ActionScript】全角半角の判別はできますか?

FLASH8(Win-XP)使用者です。
ActionScriptで、ある一文字が全角なのか半角(1バイト文字)なのかを判別する方法はあるのでしょうか?
PHPとかだと文字をバイト数で数えたりできるようですがActionScriptはそういう機能はないですよね?
お詳しい方、よろしくお願いいたします。

Aベストアンサー

そういう関数(strwidth ですか?)がないというだけで,
おそらくいくつか方法はあると思いますが,思いついた1例です。

簡単な例↓
------------------------------------------------
// 変数 S を任意の文字列とします
S = "a";
// 任意の文字列の 1 番目(0) の16ビット整数を N に代入
N = S.charCodeAt(0);
// N による条件分岐
if (N<=255) {
trace("1バイト文字("+N+")");
} else {
trace("2バイト文字("+N+")");
}
------------------------------------------------

上の考え方を基に,
文字列のバイト数をカウントする関数を作成したのが次の例です。

---------------------------------------------
// ユーザ定義関数 getStrWidth の定義 引数S
function getStrWidth(S) {
// バイト数を表す変数 N の初期化
N = 0;
// Sの文字数分ループ
for (i=0; i<S.length; i++) {
// 条件分岐
if (S.charCodeAt(i)<=255) {
N += 1;
} else {
N += 2;
}
}
trace(N);
}
// ユーザ定義関数 getStrWidth の実行
getStrWidth("3(1)ssSS");
/* trace される数の検算
3:1バイト, (:1バイト , 1:2バイト, ):1バイト
s:2バイト, s:1バイト, S:2バイト, S:1バイト
1+1+2+1+2+1+2+1=11 →11 が trace される
*/
---------------------------------------------

うまく行くと思うのですが...。
TAB とか 改行コード とかのエスケープ文字関連のものが入ったら,ひょっとしたらうまく行かないかもしれません。

そういう関数(strwidth ですか?)がないというだけで,
おそらくいくつか方法はあると思いますが,思いついた1例です。

簡単な例↓
------------------------------------------------
// 変数 S を任意の文字列とします
S = "a";
// 任意の文字列の 1 番目(0) の16ビット整数を N に代入
N = S.charCodeAt(0);
// N による条件分岐
if (N<=255) {
trace("1バイト文字("+N+")");
} else {
trace("2バイト文字("+N+")");
}
------------------------------------------------

上の考え方を...続きを読む


人気Q&Aランキング