游戏编程基础之(一):实现物体在窗口上的往返运动

近期在学习《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 )
{
}

运行结果:



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值