ege简易框架EgePlus(c++)

主函数

#include "EpApplication.hpp"
#include "TitleScene.h"

#include <Eigen/Dense>

int main()
{
	TheApp->initApp(960, 640, "EgePlush");
	EpScene * pScene = new TitleScene();
	TheApp->setCurrentScene(pScene);
	TheApp->exec(200);

	ege::getch();

	return 0;
}

场景关键代码

void TitleScene::update()
{
	x += speedx;
	y += speedy;
	if (x < 0 || x > 960 )
	{
		speedx = -speedx;
	}
	if (y < 0 || y > 640) 
	{
		speedy = -speedy;
	}

	RenderState r;



	
	r.scale(sx, sy);
	if (rotating)
	{
		r.rotate(angle+=0.05);
	}
	else {
		r.rotate(angle);
	}

	

	ege::xyprintf(x, y, "测试场景: 仿射变换-组合变换 FPS:%f", ege::getfps());
	


	for (int i = 0; i < num; ++i) {

		m_pImage->draw(pngx + i*10, pngy + i * 10, r);
	}
	
	ege::xyprintf(10, 10, "按+增加图片 按-减少图片 按Enter旋转图片 拖动鼠标移动图片 滚轮缩放图片", ege::getfps());
	
}

void TitleScene::procEvent(EpEvent event)
{
	switch (event.type)
	{
	case EpEvent::Closed:
		this->deleteSelef();//这意味着点击X时,如果此场景正在运行 那么它会在一个事件循环内删除自己 并自动弹出场景栈
		TheApp->quit();// EgePlus保证场景都会析构 放心退出吧! 注释掉此函数 然后点击X EgePlush 会给出一个无场景的提示界面
		break;
	case EpEvent::MouseMove:
		if (event.mouseMove.left) {//拖动更新 位置+=偏移量
			pngx +=  event.mouseMove.x - mousex ;
			pngy +=  event.mouseMove.y - mousey ;
		}
		//更新鼠标位置
		mousex = event.mouseMove.x;
		mousey = event.mouseMove.y;
		
		break;
	case EpEvent::MouseWheel:
		event.mouseWheelScroll.offset>0?sy=sx+=0.2:sy=sx-=0.2;
		std::cout << "sx" << sx << std::endl;
		break;

	case EpEvent::KeyPress:
		std::cout << "add " << event.keyPress.code <<" "<< VK_ADD <<std::endl;
		if (event.keyPress.code == VK_ADD) {
			//if (num <= 30) {
				num++;
				std::cout << "png加载了:" << num << "张" << std::endl;

			//}
			
		}
		if (event.keyPress.code == VK_SUBTRACT) {
			if (num >= 1) {
				num--;
			}
		}
		
		if (event.keyPress.code == VK_RETURN) {
			rotating = true;
		}
		break;
	case EpEvent::KeyRelease:
		
		if (event.keyRelease.code == VK_RETURN) {
			rotating = false;
		}
		break;
	default:
		EpScene::procEvent(event);
		break;
	}
}

效果

image.png


项目仍在开发中....

仓库地址: https://waker1001.visualstudio.com/EgePlus/_git/EgePlus

已经进行的工作:

    构建游戏主循环,重新封装了事件

    设立了‘场景’概念,方便不同场景的隔离,在场景内控制绘图和事件处理,拥有更加清晰的逻辑划分

    图像的旋转平移缩放

未来计划的工作:

     gif支持

    添加图层,方便控制绘图层次和顺序

    添加精灵,更好的控制游戏对象 

    添加音乐支持(ege已经有了)

    ...

   其他可能的操作


注意:

    请尽量使用小尺寸图片绘制(哭