主函数
#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; } }
效果
项目仍在开发中....
仓库地址: https://waker1001.visualstudio.com/EgePlus/_git/EgePlus
已经进行的工作:
构建游戏主循环,重新封装了事件
设立了‘场景’概念,方便不同场景的隔离,在场景内控制绘图和事件处理,拥有更加清晰的逻辑划分
图像的旋转平移缩放
未来计划的工作:
gif支持
添加图层,方便控制绘图层次和顺序
添加精灵,更好的控制游戏对象
添加音乐支持(ege已经有了)
...
其他可能的操作
注意:
请尽量使用小尺寸图片绘制(哭