⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gp_ani.cpp

📁 圣剑二完整的游戏代码。附作者写的三篇文章。游戏的开发过程
💻 CPP
字号:
//********************************************
//	动画 相关函数
//  创建于2000年4月16日
//********************************************
#include <windows.h>
#include <ddraw.h>
#include "ddutil.h"
#include "gp_init.h"
#include "gp_iniset.h"
#include "gp_draw.h"
#include "gp_other.h"
#include "gp_ani.h"

CAni::CAni()
{
	Pics=NULL;
}

//释放
CAni::~CAni()
{
	_RELEASE( Pics );
}

//读取一个动画
bool CAni::LoadAni(char *filename, char *index)
{
	CIniSet Ini(filename);

	x=Ini.ReadInt(index,"x");			//动画显示位置
	y=Ini.ReadInt(index,"y");			//动画显示位置
	tx=Ini.ReadInt(index,"tx");			//热点偏移
	ty=Ini.ReadInt(index,"ty");			//热点偏移
	Width=Ini.ReadInt(index,"Width");	//动画大小
	Height=Ini.ReadInt(index,"Height");	//动画大小

	Max_Pics=Ini.ReadInt(index,"Max_Pics");		//图片数目
	Cur_Pic=Ini.ReadInt(index,"Cur_Pic");		//显示的当前侦
	ShowCount=Ini.ReadInt(index,"ShowCount");	//记数器

 	char *str=Ini.ReadText(index,"FileName");
	strcpy(FileName, str);						//图片文件名
	_FREE( str );

	CreateBitmap(Pics, 0,0, FileName);			//创建页面
	DDSetColorKey(Pics, ColorKey);
	WLines=Ini.ReadInt(index,"WLines");
	HLines=Ini.ReadInt(index,"HLines");			//图片的横竖排列个数
	bArrayH=Ini.ReadInt(index,"bArrayH");		//横向优先

	Delay=Ini.ReadInt(index,"Delay");			//两帧间的间隔时间
	bColorKey=Ini.ReadInt(index,"bColorKey");	//两帧间的间隔时间
	bActive=Ini.ReadInt(index,"bActive");		//是否活动
	bShow=Ini.ReadInt(index,"bShow");			//是否显示
	
	Cur_Rect=GetRect( 0, 0, Width, Height );
	
	OldTick=timeGetTime();
	return true;
}

//显示
void CAni::ShowAni(LPDIRECTDRAWSURFACE Sour, int lx, int ly, int Cur_Picture)
{
	if( !bShow || ShowCount==0 )
		return;

	if( bActive && timeGetTime() > OldTick+Delay )	//时间到
	{
		OldTick=timeGetTime();

		if( Cur_Picture== -1 ) 
			Cur_Picture=Cur_Pic;

		int x1, y1;
		if( bArrayH )	//横向优先排列
		{
			x1=Cur_Picture%WLines;
			y1=Cur_Picture/WLines;
		}
		else
		{
			x1=Cur_Picture%HLines;
			y1=Cur_Picture/HLines;
		}

		int W=Width*x1;
		int H=Height*y1;
		Cur_Rect=GetRect( W, H, W+Width, H+Height );
	
		Cur_Pic=(Cur_Pic+1)%Max_Pics;		//下一帧
		if( ShowCount > 0 ) ShowCount--;	//记数器减1
	}

	Blt(Sour, lx+tx, ly+ty, Pics, Cur_Rect, bColorKey);	//显示
}

//显示
void CAni::ShowAni(LPDIRECTDRAWSURFACE Sour)
{
	if( !bShow || ShowCount==0 )
		return;

	if( bActive && timeGetTime() > OldTick+Delay )	//时间到
	{
		OldTick=timeGetTime();

		int x1, y1;
		if( bArrayH )	//横向优先排列
		{
			x1=Cur_Pic%WLines;
			y1=Cur_Pic/WLines;
		}
		else
		{
			x1=Cur_Pic/HLines;
			y1=Cur_Pic/HLines;
		}

		int W=Width*x1;
		int H=Height*y1;
		Cur_Rect=GetRect( W, H, W+Width, H+Height );
	
		Cur_Pic=(Cur_Pic+1)%Max_Pics;		//下一帧
		if( ShowCount > 0 ) ShowCount--;	//记数器减1
	}

	Blt(Sour, x+tx, y+ty, Pics, Cur_Rect, bColorKey);	//显示
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -