用EGE如何实现游戏效果(附加)
可以利用EGE图形库不断地显示图像,从而产生图层的堆叠,让游戏中的图像动起来,这应该是
二维游戏的基本原理,例如:一秒连续打印60次为fps(60)
如何让EGE窗口实现这个原理,代码如下:
ROLE hero;//建立一个精灵
hero.getname("hero.png");//加载物体图像
for(;is_run();delay_fps(60)){
hero.move(1,0);//移动精灵
//在此加入背景代码
hero.print_role();//打印精灵
}
这样就建立出了一个基本的人物移动样例,注意如果没有打印背景来盖住前面的图层,你会得到一条长长的图层堆叠,像个进度条
更新版代码
cyfgame游戏库更新至1.1,代码如下不必多言^_^
/*库名称:cyfgame.h
版本:1.1
这是一个基于graphics.h图形库编写的一个十分轻量级的游戏编程库
如要使用,请先下载EGE图形库*/
#include<graphics.h>
#include<windows.h>
int cyf[1000];
void creat_window(int x,int y,char name[60],int w,int h)//显示窗口,此函数为非必要函数,用EGE的initgraph可以使用,格式一样
{
initgraph(w,h);
setcaption(name);
movewindow(x,y);
}
void hide_cmd(void)//隐藏控制台
{
ShowWindow(GetForegroundWindow(),SW_HIDE);
}
bool aniu(char name[60],int x,int y,int bian,mouse_msg mouse)//按钮函数 1.按钮的png文件路径,x,y为按钮坐标,4.按钮编号(必须填写)5.定义一个鼠标结构体getmouse(),此函数需要在循环中使用
{
PIMAGE png=newimage();
int w,h;
getimage(png,name);
w=getwidth(png);
h=getheight(png);
if(cyf[bian]==0)
{
putimage(x,y,png);
cyf[bian]=1;
}
delimage(png);
if(mouse.is_down() && mouse.is_left() && mouse.y>=y && mouse.y<=y+h && mouse.x>=x && mouse.x<=x+w)
{
return true;
}
else
{
return false;
}
}
struct ROLE//角色结构体 pngname:png路径 x,y角色坐标 inint_role()初始化角色 move(x,y)移动角色多少格不是坐标
{
char pngname[60];
bool jumpbreak=false;
int x;
int y;
void getname(char name[60])
{
for(int i=0;i<=59;i++)
{
pngname[i]=name[i];
}
}
void init_role(void)
{
PIMAGE png=newimage();
getimage(png,pngname);
putimage_transparent(NULL,png,x,y,(0,0,0));
delimage(png);
}
void print_role(void)
{
PIMAGE png=newimage();
getimage(png,pngname);
putimage_transparent(NULL,png,x,y,(0,0,0));
delimage(png);
}
void move(int x3,int y3)
{
PIMAGE png1=newimage();
getimage(png1,pngname);
putimage_transparent(NULL,png1,x+x3,y+y3,(0,0,0));
x+=x3;
y+=y3;
delimage(png1);
}
void jump(int gao)
{
int speed=gao;
for(int i=0;i<=gao;i++)
{
if(jumpbreak==true)
{
break;
}
y-=speed;
speed--;
}
for(int i=0;i<=gao;i++)
{
if(jumpbreak==true)
{
break;
}
y+=speed;
speed++;
}
}
};
struct Group//精灵组结构体,便于管理多个role,add_role()添加精灵,add_group()添加精灵组,update_group()刷新显示精灵组
{
private:
int i;
public:
ROLE role[1000];
void add_role(ROLE add)
{
role[i] = add;
i++;
}
void add_group(ROLE add_group[100],int numaber)
{
for(int i1;i1<=numaber;i1++)
{
role[i+i1] = add_group[i1];
}
i+=numaber+1;
}
void update_group(void)
{
for(int i2;i2<=i;i2++)
{
role[i2].print_role();
}
}
};
bool crash(ROLE a,ROLE b)//检测碰撞两个角色之间
{
PIMAGE png3=newimage(),png2=newimage();
int w1,h1,w2,h2;
getimage(png3,a.pngname);
getimage(png2,b.pngname);
w1=getwidth(png3);
h1=getheight(png3);
w2=getwidth(png2);
h2=getheight(png2);
delimage(png3);
delimage(png2);
if(a.x<=b.x)
{
if((a.x+w1>b.x)==false)
{
return false;
}
}
if(a.x>=b.x)
{
if((a.x+w1<b.x)==false)
{
return false;
}
}
if(a.y<b.y)
{
if((a.y+h1>b.y)==false)
{
return false;
}
}
if(a.y>b.y)
{
if((a.y+h1<b.y)==false)
{
return false;
}
}
if(a.y==b.y && a.x==b.x)
{
return false;
}
return true;
}
更新内容
cyfgame安装使用教程可参考:C++游戏头文件(基于EGE图形库的游戏头文件代码及教程)
同在优快云发布
一.精灵组
用来管理多个精灵,统一输出图像,便于汇总相同的精灵,使输出精灵统一化
二.跳跃
没编成功但似乎可以运行,精灵直接飞出屏幕,物理还需进一步学习。。。。。