近期在学习《C++游戏与图形编程基础》第2版 地址是:http://transbot.blog.163.com/blog/static/5421396120145108282739/ 里面有一些环境搭建的流程,以及相应代码。开发环境是VC++2000,整个游戏框架为 AGK。
就自己的进度做一个记录,也作为交流学习之用。如有不足之处,敬请指正。
1~6章为C++基础部分,暂且略过。
第7章介绍了一些最基本的游戏界面的操作,包括控制图像的位置,多图像之间的层次判断,以及物体移动的方法等
#include "template.h"
using namespace AGK;
app App;
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
const int BEACH_INDEX = 1;
const int DOG_IMAGE_INDEX = 1;
const int DOG_SPRITE_INDEX = 2;
const float ROTATION=1;
const int MOVEMENT=5;
const int StartX=0;
const int StartY=0;
const int FRAME_PER_SEC=60;
const int REFRESH_MODE=1;
const int MOVING_RIGHT=1;
const int MOVING_LEFT=0;
int g_GAME_STATE=1;
//const int MISSBEAR_IMAGE_INDEX = 1;
//const int MISSBEAR_SPRITE_INDEX = 2;
void app::Begin( void )
{
agk::SetSyncRate(FRAME_PER_SEC,REFRESH_MODE);//frameRate
agk::SetVirtualResolution(SCREEN_WIDTH, SCREEN_HEIGHT);
agk::CreateSprite(BEACH_INDEX, "DogAtBeach/beach.png");//创建图像
agk::LoadImage(DOG_IMAGE_INDEX,"DogAtBeach/Dog.png",1); //1表示去除黑色背景,即将该图像的黑色背景部分去除,之后给下一行的create用
agk::CreateSprite(DOG_SPRITE_INDEX,DOG_IMAGE_INDEX);//这里不能将DOG_IMAGE_INDEX变为"Dog.png",不然显示的图像就没有去黑色背景的作用了
agk::SetSpriteDepth(DOG_SPRITE_INDEX,0); //图片深度,范围0~1000 数字越小表示显示地越靠前
agk::SetSpriteDepth(BEACH_INDEX,1000);
agk::SetSpritePosition(DOG_SPRITE_INDEX,0,0);
agk::SetSpriteScale(DOG_SPRITE_INDEX,0.3,0.3); //缩放
}
void app::Loop ( void )
{
int DogX=agk::GetSpriteX(DOG_SPRITE_INDEX);
int SpiriteWidth=agk::GetSpriteWidth(DOG_SPRITE_INDEX);
int SpiriteHeight=agk::GetSpriteHeight(DOG_SPRITE_INDEX); //获取图像的宽、高等信息
if(g_GAME_STATE==MOVING_RIGHT ) //重点部分,通过全局变量g_GAME_STATE来判断物体的运动情况,默认设置为1
{
if(DogX<SCREEN_WIDTH-SpiriteWidth)
{
agk::SetSpriteX(DOG_SPRITE_INDEX,DogX+MOVEMENT); //Dog向右移动
}
else
{
g_GAME_STATE=MOVING_LEFT; //Dog运动到最右边后,改变状态
}
}
else
{
if(DogX > StartX)
{
agk::SetSpriteX(DOG_SPRITE_INDEX,DogX-MOVEMENT); //Dog向左移动
}
else
{
g_GAME_STATE=MOVING_RIGHT ; //Dog运动到最左边后,改变状态,之后Dog运动方向再次变为向右,实现不间断运动的效果
}
}
agk::Sync();
}
void app::End ( void )
{
}
运行结果: