GameMaker 日本語掲示板

会話イベントにて・・・

2 コメント
views
16 フォロー

会話イベントで
https://zawazawa.jp/gamemaker_jp/topic/192
こちらにあったトピックで、文字を一文字ずつ表示させることが出来ました。
そこで、
「文字を一文字ずつ表示している途中で、エンターキーを押したら、文字をすべて表示させるようにしたい」
のですが、どのようなコードを入力すればよいでしょうか?

ZUN is my dream(19)
作成: 2024/06/13 (木) 00:05:31
通報 ...
1
//Create Event
//表示する文章
text = ["Hellooooooooooo","Godnightttttttttt"]; //配列にしないと少し面倒なため([]内は一つだけでも大丈夫です)
//配列番号(初期値が0だと一つ目の会話がスキップされてしまうため)
array_index = -1;
//表示可能な文字数
index = 0;
//表示速度(フレーム)
textSpeed = 5;
//文字がすべて表示されたか(初期値が1でないと最初が再生できないため)
next = 1;
//Step Event
//Enterを押したら再生
if(keyboard_check_pressed(vk_enter))
{
     if(next == 1){
        //表示可能文字を0に設定
	index = 0;
        //文字数が最大でないので0に設定
	next = 0;
        //次の会話へ
        array_index ++;
        //アラームイベントをtextSpeedフレーム後に起動
	alarm[0] = textSpeed;
	 }else if(next == 0){
        //index(文字表示数)にテキストの最大文字数を入れる
        index = string_length(text[array_index]);
        //文字数が最大になったので1に設定
        next=1
       }
}

if(array_index!=-1){//array_indexが-1の状態でtext[array_index]を参照させるとエラーが起こるため
if(index == string_length(text[array_index])){
    //文字数が最大になったので1に設定
    next = 1;
}
}
//Alarm[0] Event
//表示可能文字数を増やす
index++;

//表示可能文字数がテキストの文字数未満なら
if(index < string_length(text[array_index]))
{
	//再度アラームイベントをtextSpeedフレーム後に起動
	alarm[0] = textSpeed;
}
//Draw Event
if(array_index>=0){//array_indexが-1の状態でtext[array_index]を参照させるとエラーが起こるため
//テキストの1番目から表示可能文字数までの数を取得
var str = string_copy(text[array_index],1,index);
//それを表示
draw_text(x,y,str);
}

回答者様のコードをベースに色々加えました。元々textは配列ではなかったのですが、配列の方がコードをシンプルにしやすいのと会話イベントなので配列にしても問題ないと思い配列にしています。今回の主な変更としてstepイベント内のEnterを押したときの処理を文字数が最大表示であるかどうかで、「indexにstring_length(text[array_index])、つまり会話の最大文字数を入れる」か、「次の会話に行く」になるようにしました。次の会話がない状態で次の会話へ行こうとするとエラーが起こってしまうので、「次の会話がない時、会話を終了する」等の処理を施してください。

2
ZUN is my dream(19) 2024/06/14 (金) 02:54:51

分かりやすい説明ありがとうございます!!
無事に動くことが出来ました!!