亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? animate.cpp

?? 游戲c++開發簡例
?? CPP
字號:
/*
	Animate是一組RleBitmap序列,這些RleBitmap存放在連續的內存中
*/

#include "gl.h"
//#include "gengine.h"

#define ANI_SIGNATURE	0x00494e41	//"ANI"
/*
class Animate{
public:
	RleBitmap** pic;
	int totalFrames, currentFrame;
	int x, y;		//坐標矯正
	DWORD size;		//數據長度
	void* data;		//數據

	Animate();
	~Animate();

	int Draw( Bitmap* dest, int x, int y );
	void Restart( void );
	void SetXY( int x, int y );
};

int SaveAnimate( char* filename );
Animate* LoadAnimate( char* filename );
*/
Animate::Animate()
{
	pic = NULL;
	data = NULL;
	totalFrames = 0;
	currentFrame = 0;
	dir = 0;
	autoReverse = 0;
}

Animate::~Animate()
{
	int i;

	for( i=0; i<totalFrames; i++ ){
		if( pic[i] ){
			pic[i]->line = NULL;
			delete pic[i];
		}
	}
	delete pic;
	delete data;
}

//返回值為零表示一次循環結束
int Animate::Draw( Bitmap* dest, int x, int y )
{
	RleBitmapBlit( dest, x - Animate::x, y - Animate::y, pic[currentFrame] );
	currentFrame ++;
	if( currentFrame == totalFrames )
		currentFrame = 0;
	return currentFrame;
}

int Animate::DrawCurrentFrame( Bitmap* dest, int x, int y )
{
	RleBitmapBlit( dest, x - Animate::x, y - Animate::y, pic[currentFrame] );
	return currentFrame;
}

int Animate::GetNextFrame( RleBitmap** rbm ){
	if( dir == 0 ){
		*rbm = pic[currentFrame++];
		if( currentFrame == totalFrames ){
			if( autoReverse ){
				dir = 1;
				currentFrame = totalFrames - 1;
			}
			else
				currentFrame = 0;
		}
	}
	else{
		*rbm = pic[currentFrame--];
		if( currentFrame == -1 ){
			if( autoReverse ){
				dir = 0;
				currentFrame = 0;
			}
			else
				currentFrame = totalFrames - 1;
		}
	}
	return currentFrame;
};

void Animate::Restart( void )
{
	currentFrame = 0;
}

void Animate::SetXY( int x, int y )
{
	Animate::x = x;
	Animate::y = y;
}

/////////////////////////////////////////////////////////////////////
Animate* LoadAnimate( char* filename )
{
	File *fp;
	fp = cfile.Open( filename );
	if( fp == NULL )
		return NULL;

	int i, j, temp;

	fp->Read( &temp, 4 );
	if( temp != ANI_SIGNATURE ){
		fp->Close();
		return NULL;
	}

	Animate* ani = new Animate;
	if( ani == NULL ){
		fp->Close();
		return NULL;
	}
	//初始化
	fp->Read( &(ani->totalFrames), sizeof(int) );
	fp->Read( &(ani->size), sizeof(int) );
	fp->Read( &(ani->x), sizeof(int) );
	fp->Read( &(ani->y), sizeof(int) );
	ani->pic = (RleBitmap**)new char[sizeof(RleBitmap*) * ani->totalFrames ];
	ZeroMemory( ani->pic, sizeof(RleBitmap*) * ani->totalFrames );
	ani->data = new char[ ani->size ];
	if( ani->pic == NULL || ani->data == NULL ){
		ani->totalFrames = 0;
		goto error;
	}
	//創建rleBitmap
	for( i=0; i<ani->totalFrames; i++ ){
		if( (ani->pic[i] = new RleBitmap) == NULL )
			goto error;
	}
		
	//讀入rleBitmap數據頭
	ani->pic[0]->line = (char**)ani->data;
	for( i=0, temp=0; i<ani->totalFrames; i++ ){
		fp->Read( &(ani->pic[i]->size), sizeof(DWORD));
		fp->Read( &(ani->pic[i]->colorDepth), sizeof(int) );
		fp->Read( &(ani->pic[i]->x), sizeof(int));
		fp->Read( &(ani->pic[i]->y), sizeof(int));
		fp->Read( &(ani->pic[i]->width), sizeof(int));
		fp->Read( &(ani->pic[i]->height), sizeof(int));
		ani->pic[i]->line = (char**)((DWORD)ani->pic[0]->line + temp);
		ani->pic[i]->line[0] = (char*)ani->pic[i]->line + ani->pic[i]->height * sizeof( char* );
		temp += ani->pic[i]->height * sizeof( char* ) + ani->pic[i]->size;
	}
	//讀入像素數據
	for( i=0; i<ani->totalFrames; i++ ){
		for( j=0; j<ani->pic[i]->height; j++ )
			ani->pic[i]->line[j] = ani->pic[i]->line[0] + fp->Getdw();
		fp->Read( ani->pic[i]->line[0], ani->pic[i]->size );
	}
	//格式轉換
	for( i=0; i<ani->totalFrames; i++ )
		ani->pic[i]->ConvertFormat( screenInfo.colorDepth );

	fp->Close();
	return ani;

error:
	fp->Close();
	delete ani;
	return NULL;
}

int SaveAnimate( char* filename, Animate* ani )
{
	return MakeAnimateFile( filename, ani->pic, ani->totalFrames );
}

int MakeAnimateFile( char* filename, RleBitmap** src, int num )
{
	if( src == NULL )
		return -1;

	FILE *fp = fopen( filename, "wb" );
	if( fp == NULL )
		return -1;

	int i, j, temp;
	Animate *ani = new Animate;
	if( ani == NULL ){
		fclose( fp );
		return -1;
	}

	ani->totalFrames = num;
	ani->size = 0;
	for( i=0; i<num; i++ )
		ani->size += src[i]->height * sizeof(char*) + src[i]->size;

	i = ANI_SIGNATURE;
	fwrite( &i, 4, 1, fp );
	fwrite( &(ani->totalFrames), sizeof(int), 1, fp );
	fwrite( &(ani->size), sizeof(DWORD), 1, fp );
	fwrite( &(ani->x), sizeof(int), 1, fp );
	fwrite( &(ani->y), sizeof(int), 1, fp );

	for( i=0; i<num; i++ ){
		//寫rleBitmap數據頭
		fwrite( &(src[i]->size), sizeof(src[i]->size), 1, fp );
		fwrite( &(src[i]->colorDepth), sizeof(src[i]->colorDepth), 1, fp );
		fwrite( &(src[i]->x), sizeof(src[i]->x), 1, fp );
		fwrite( &(src[i]->y), sizeof(src[i]->y), 1, fp );
		fwrite( &(src[i]->width), sizeof(src[i]->width), 1, fp );
		fwrite( &(src[i]->height), sizeof(src[i]->height), 1, fp );
	}
	for( i=0; i<num; i++ ){
		//寫入每行像素的首地址相對于line[0]的偏移
		for( j=0; j<src[i]->height; j++ ){
			temp = src[i]->line[j] - src[i]->line[0];
			fwrite( &temp, sizeof( DWORD ), 1, fp );
		}
		//寫入像素數據
		fwrite( src[i]->line[0], 1, src[i]->size, fp ); 
	}
	ani->totalFrames = 0;
	delete ani;
	fclose( fp );
	return 0;
}

static Animate *test[32];

int InitAni( void )
{
	int i;
	test[0] = LoadAnimate( "data\\picture\\warrior\\fight0.ani" );
	test[1] = LoadAnimate( "data\\picture\\warrior\\fight1.ani" );
	test[2] = LoadAnimate( "data\\picture\\warrior\\fight2.ani" );
	test[3] = LoadAnimate( "data\\picture\\warrior\\fight3.ani" );
	test[4] = LoadAnimate( "data\\picture\\warrior\\fight4.ani" );
	test[5] = LoadAnimate( "data\\picture\\warrior\\fight5.ani" );
	test[6] = LoadAnimate( "data\\picture\\warrior\\fight6.ani" );
	test[7] = LoadAnimate( "data\\picture\\warrior\\fight7.ani" );
	test[8] = LoadAnimate( "data\\picture\\warrior\\walk0.ani" );
	test[9] = LoadAnimate( "data\\picture\\warrior\\walk1.ani" );
	test[10] = LoadAnimate( "data\\picture\\warrior\\walk2.ani" );
	test[11] = LoadAnimate( "data\\picture\\warrior\\walk3.ani" );
	test[12] = LoadAnimate( "data\\picture\\warrior\\walk4.ani" );
	test[13] = LoadAnimate( "data\\picture\\warrior\\walk5.ani" );
	test[14] = LoadAnimate( "data\\picture\\warrior\\walk6.ani" );
	test[15] = LoadAnimate( "data\\picture\\warrior\\walk7.ani" );
	test[16] = LoadAnimate( "data\\picture\\warrior\\stand0.ani" );
	test[17] = LoadAnimate( "data\\picture\\warrior\\stand1.ani" );
	test[18] = LoadAnimate( "data\\picture\\warrior\\stand2.ani" );
	test[19] = LoadAnimate( "data\\picture\\warrior\\stand3.ani" );
	test[20] = LoadAnimate( "data\\picture\\warrior\\stand4.ani" );
	test[21] = LoadAnimate( "data\\picture\\warrior\\stand5.ani" );
	test[22] = LoadAnimate( "data\\picture\\warrior\\stand6.ani" );
	test[23] = LoadAnimate( "data\\picture\\warrior\\stand7.ani" );
	test[24] = LoadAnimate( "data\\picture\\warrior\\gothit0.ani" );
	test[25] = LoadAnimate( "data\\picture\\warrior\\gothit1.ani" );
	test[26] = LoadAnimate( "data\\picture\\warrior\\gothit2.ani" );
	test[27] = LoadAnimate( "data\\picture\\warrior\\gothit3.ani" );
	test[28] = LoadAnimate( "data\\picture\\warrior\\gothit4.ani" );
	test[29] = LoadAnimate( "data\\picture\\warrior\\gothit5.ani" );
	test[30] = LoadAnimate( "data\\picture\\warrior\\gothit6.ani" );
	test[31] = LoadAnimate( "data\\picture\\warrior\\gothit7.ani" );
	for( i=0; i<32; i++ ){
		if( test[i] == NULL )
			return -1;
		test[i]->SetXY ( 0, 30 );
	}
	return 0;
}

void testAni( void )
{
	int i, j;
	for( i=0; i<8; i++ )
		for( j=0; j<4; j++ );
		//	test[i*4+j]->Draw( backScreen, i*80, j*88 );
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产综合人成综合网站| 日韩福利电影在线| 性做久久久久久免费观看欧美| 美国十次了思思久久精品导航| av在线一区二区| 日韩欧美国产综合| 亚洲欧洲制服丝袜| 国产精品88888| 日韩一区二区精品| 亚洲精品视频观看| 成人a免费在线看| 日韩精品中文字幕一区| 亚洲国产乱码最新视频| 成人午夜激情片| 精品日韩在线观看| 五月激情综合网| 99re视频精品| 国产网站一区二区| 国产伦精品一区二区三区视频青涩| 欧美体内she精高潮| 亚洲色图丝袜美腿| 成人免费视频免费观看| 国产亚洲自拍一区| 久久精品国产久精国产爱| 欧美色欧美亚洲另类二区| 亚洲精品成a人| 91亚洲大成网污www| 最近中文字幕一区二区三区| 成人激情午夜影院| 中文字幕日韩av资源站| 99久久久无码国产精品| 亚洲天堂av一区| 91小视频在线| 亚洲免费在线观看| 91网站最新网址| 国产精品国产a| 91色porny蝌蚪| 亚洲精品v日韩精品| 欧美综合色免费| 香蕉乱码成人久久天堂爱免费| 欧美三级欧美一级| 首页国产丝袜综合| 欧美成人激情免费网| 美女视频第一区二区三区免费观看网站| 欧美精品黑人性xxxx| 日韩影视精彩在线| 日韩一级成人av| 激情都市一区二区| 国产日本亚洲高清| 成人综合婷婷国产精品久久免费| 国产精品久久毛片| 欧美性大战久久久久久久蜜臀| 亚洲国产cao| 日韩一区二区三区观看| 国产盗摄精品一区二区三区在线| 国产精品系列在线| 欧美在线观看禁18| 秋霞午夜av一区二区三区| 亚洲精品在线观看视频| 成人av在线资源| 性欧美疯狂xxxxbbbb| 久久一区二区视频| 91丨九色丨尤物| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产亚洲精品中文字幕| 在线国产亚洲欧美| 国产尤物一区二区在线| 伊人夜夜躁av伊人久久| 精品电影一区二区| 91成人网在线| 国产乱子轮精品视频| 亚洲黄色av一区| 精品国产91洋老外米糕| av中文一区二区三区| 久久av资源网| 亚洲午夜在线观看视频在线| 久久久99久久| 欧美一区二区三区在线观看视频| 成人黄色777网| 久久精品国产精品亚洲红杏| 亚洲美女免费在线| 日韩精品一区二区三区在线| 色综合中文字幕| 国产精品自拍在线| 日本午夜一区二区| 亚洲免费观看高清完整版在线 | 久久综合九色综合97_久久久| 成人av在线一区二区| 久久99久久精品欧美| 一区二区三区日韩精品视频| 国产欧美精品国产国产专区| 欧美麻豆精品久久久久久| 91网站在线播放| 成人深夜福利app| 国产精品一区二区在线观看不卡 | 国产精品中文字幕一区二区三区| 一二三区精品视频| 日韩理论片网站| 日本一二三不卡| 久久久国产精品不卡| 日韩欧美一区电影| 欧美久久久一区| 欧美日韩一区二区三区四区五区| 99视频一区二区| 成人永久看片免费视频天堂| 精品一区二区免费| 蜜桃视频在线一区| 免费xxxx性欧美18vr| 天天色图综合网| 精品一区二区在线看| 亚洲777理论| 亚洲成人午夜影院| 亚洲一二三专区| 亚洲午夜久久久久中文字幕久| 一区二区三区在线视频播放| 亚洲免费视频中文字幕| 一区二区三区精品视频在线| 亚洲与欧洲av电影| 亚洲福中文字幕伊人影院| 亚洲午夜电影在线观看| 亚洲成人www| 蜜臀av一区二区在线免费观看| 免费一级片91| 极品瑜伽女神91| 国产91丝袜在线观看| av男人天堂一区| 91成人免费网站| 日韩一区二区中文字幕| 精品国产不卡一区二区三区| 国产欧美日韩卡一| 亚洲手机成人高清视频| 亚洲综合色在线| 免费在线视频一区| 国产成人丝袜美腿| 99久久久免费精品国产一区二区 | 制服丝袜亚洲网站| 日韩欧美在线网站| 国产亚洲一本大道中文在线| 国产精品高潮呻吟久久| 五月综合激情婷婷六月色窝| 玖玖九九国产精品| 成人国产一区二区三区精品| 日本大香伊一区二区三区| 欧美精品tushy高清| 久久久久久毛片| 亚洲欧美另类久久久精品2019| 日韩va亚洲va欧美va久久| 国产精品影视在线| 91麻豆国产自产在线观看| 欧美一区二区在线看| 日本一区二区免费在线观看视频| 一区二区三区四区不卡视频| 免费成人在线网站| 99久久99久久精品免费看蜜桃| 欧美调教femdomvk| 国产亚洲一区二区三区在线观看 | 亚洲免费观看高清完整版在线观看| 亚洲成人动漫在线免费观看| 国产一区二区导航在线播放| 色婷婷综合久久久中文字幕| www国产精品av| 亚洲成精国产精品女| 丁香天五香天堂综合| 91精品国产综合久久福利| 国产精品夫妻自拍| 精品一二三四区| 欧美三级午夜理伦三级中视频| 国产精品丝袜久久久久久app| 天天色综合成人网| 色噜噜夜夜夜综合网| 国产蜜臀av在线一区二区三区| 亚洲电影在线播放| 99在线热播精品免费| 日韩欧美电影一二三| 一区二区三区精品| 成人黄色软件下载| 久久青草欧美一区二区三区| 天堂va蜜桃一区二区三区漫画版| 成人av网站在线观看免费| 久久这里只有精品6| 蜜臀久久久久久久| 91精品欧美久久久久久动漫| 国产精品电影一区二区三区| 狠狠久久亚洲欧美| 欧美一区二区大片| 午夜精品久久久久久久99水蜜桃 | 国产在线一区二区| 91精品婷婷国产综合久久竹菊| 一区二区在线观看视频| 波波电影院一区二区三区| 精品99一区二区| 国产在线视视频有精品| 欧美精品一区二区三区在线播放 | 亚洲曰韩产成在线| 成人精品一区二区三区四区| 亚洲精品一区二区三区精华液| 免费成人在线视频观看| 欧美一级xxx| 日本亚洲欧美天堂免费| 欧美一级片在线观看|