文字列のアニメーション

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
anz

文字列のアニメーション

#1

投稿記事 by anz » 12年前

入力した文字列が一文字ずつ左から右に文字が流れ真ん中あたりで止まり、
最終的に中央に文字列が表示されるプログラムを作りたいのですが
カクカクしすぎて文字が動いてるように見えないのと、
文字列が逆向きに並んでしまうのと、止まった後に流れている文字が消えてしまう、
など大量に分からないところが出てしまいました。

説明足らずで分かりにくいとは思いますが、ご指南お願いいたします。

コード:


#include <stdio.h>
#include <stdlib.h>
#include <eggx.h>
#include <string.h>

int main(){

    char string[100];
    char tempSter[2];
    int i,win;
    double x,finish;//座標指定
    double stop = 100.0;
    
    printf("input string >> ");
    scanf("%s", string);
    
    win=gopen(400,400); /* 描画ウィンドウを開く */
    winname(win, "character"); /* 名前をつける */
    
    for (i = 0; i < strlen(string); i++){
        tempSter[0]=string[i];
        tempSter[1]='\0';
        finish = stop + 20.0; //停止する座標
        for (x = 400.0; x >= finish; x-=0.01) {
              gclr(win);                 //画面を消去
            drawstr(win, x, 200.0, 20, 0.0, tempSter);//描画
        }
        drawstr(win, x, 200.0, 20, 0.0, tempSter);//描画
    }
    
    ggetch(); /* キー入力を待つ */
    gclose(win); /* 描画ウィンドウを閉じる */
    
    return 0;
}

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: 文字列のアニメーション

#2

投稿記事 by みけCAT » 12年前

使用しているライブラリがわからないので、とりあえずDXライブラリでサンプルを書いてみました。

コード:

#include "DxLib.h"

char Key[256];

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
	if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //初期化処理
	SetDrawScreen( DX_SCREEN_BACK );        //裏画面に設定

	char string[100]="AsumiKanaSan";
	char tempString[4]={string[lstrlen(string)-1],'\0'};
	char drawedString[100]={};
	char* drawedStringBuffer=drawedString+lstrlen(string);

	int startX=320-GetDrawStringWidth(string,lstrlen(string))/2;
	int endX=320+GetDrawStringWidth(string,lstrlen(string))/2;
	int nowChar=lstrlen(string)-1,nowPos=-10;
	int stopPos=endX-GetDrawStringWidth(tempString,lstrlen(tempString));
	int animationRunning=1;

	while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
		//↑メッセージ処理         ↑画面をクリア          ↑キーボード入力状態取得       ↑ESCが押されていない

		//ココに処理を書いていく
		DrawString(endX-GetDrawStringWidth(drawedStringBuffer,lstrlen(drawedStringBuffer)),
			240,drawedStringBuffer,GetColor(255,255,255));
		if(animationRunning) {
			if(nowPos<stopPos) {
				nowPos+=3;
				DrawString(nowPos,240,tempString,GetColor(255,255,255));
			} else {
				*(--drawedStringBuffer)=string[nowChar];
				nowChar--;
				if(nowChar>=0) {
					tempString[0]=string[nowChar];
					stopPos=endX-GetDrawStringWidth(drawedStringBuffer,lstrlen(drawedStringBuffer))
						-GetDrawStringWidth(tempString,lstrlen(tempString));
					nowPos=-10;
				} else {
					animationRunning=0;
				}
			}
		}

		ScreenFlip();//裏画面を表画面に反映
	}

	DxLib_End();
	return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

anz

Re: 文字列のアニメーション

#3

投稿記事 by anz » 12年前

回答ありがとうございました
友人に助けをもらってなんとかなりました!

閉鎖

“C言語何でも質問掲示板” へ戻る