mirror of
https://github.com/zouhuidong/HiEasyX.git
synced 2024-11-25 16:35:31 +08:00
Update Balls.cpp
This commit is contained in:
parent
09bb61857d
commit
5848ce7da2
@ -1,20 +1,20 @@
|
||||
/**
|
||||
* @brief 透明小球边界碰撞示例
|
||||
* @note 此示例用于演示 HiCanvas 的透明通道、场景和图层
|
||||
* @author huidong <mailhuid@163.com>
|
||||
* @version HiEasyX Ver0.3.2
|
||||
* @date 2023.01.12
|
||||
* @brief 透明小球边界碰撞示例
|
||||
* @note 此示例用于演示 HiCanvas 的透明通道、场景和图层
|
||||
* @author huidong<mailhuid@163.com> alan-crl<alan-crl@foxmail.com>
|
||||
* @version HiEasyX Ver0.4.1
|
||||
* @date 2024.01.31
|
||||
*/
|
||||
|
||||
#include "HiEasyX.h"
|
||||
|
||||
// 小球数量
|
||||
// 小球数量
|
||||
#define BALL_NUM 14
|
||||
|
||||
// 小球半径
|
||||
// 小球半径
|
||||
#define RADIUS 70
|
||||
|
||||
// 球体
|
||||
// 球体
|
||||
struct Ball
|
||||
{
|
||||
hiex::ImageBlock img;
|
||||
@ -22,39 +22,39 @@ struct Ball
|
||||
float vx, vy;
|
||||
};
|
||||
|
||||
hiex::SysButton btn; // 按钮
|
||||
bool show_outline = false; // 是否显示轮廓
|
||||
hiex::SysButton btn; // 按钮
|
||||
bool show_outline = false; // 是否显示轮廓
|
||||
|
||||
int main()
|
||||
{
|
||||
hiex::Window wnd(640, 480); // 创建窗口
|
||||
hiex::Canvas canvas; // 创建画布对象
|
||||
wnd.BindCanvas(&canvas); // 将窗口和画布绑定
|
||||
hiex::Window wnd(640, 480); // 创建窗口
|
||||
hiex::Canvas canvas; // 创建画布对象
|
||||
wnd.BindCanvas(&canvas); // 将窗口和画布绑定
|
||||
|
||||
// 手动刷新双缓冲
|
||||
// 手动刷新双缓冲
|
||||
//hiex::EnableAutoFlush(false);
|
||||
|
||||
canvas.Clear(true, BLACK); // 设置背景色为黑色,清空画布
|
||||
canvas.Clear(true, BLACK); // 设置背景色为黑色,清空画布
|
||||
|
||||
// 创建按钮,用于点击设置是否显示轮廓
|
||||
// 创建按钮,用于点击设置是否显示轮廓
|
||||
btn.Create(wnd.GetHandle(), 50, 50, 120, 30, L"Hide outline");
|
||||
btn.RegisterMessage([]() {
|
||||
show_outline = !show_outline;
|
||||
btn.SetText(show_outline ? L"Show outline" : L"Hide outline");
|
||||
btn.SetText(show_outline ? L"Show outline" : L"Hide outline");
|
||||
});
|
||||
|
||||
// 初始化随机数
|
||||
// 初始化随机数
|
||||
srand((UINT)time(nullptr));
|
||||
|
||||
hiex::Scene scene; // 场景
|
||||
hiex::Layer layer; // 图层
|
||||
hiex::Scene scene; // 场景
|
||||
hiex::Layer layer; // 图层
|
||||
|
||||
Ball balls[BALL_NUM]; // 小球
|
||||
Ball balls[BALL_NUM]; // 小球
|
||||
|
||||
// 初始化小球
|
||||
// 初始化小球
|
||||
for (auto& i : balls)
|
||||
{
|
||||
// 位置和速度的初始化
|
||||
// 位置和速度的初始化
|
||||
i.x = (float)(rand() % canvas.GetWidth());
|
||||
i.y = (float)(rand() % canvas.GetHeight());
|
||||
i.vx = rand() % 5 * (rand() % 2 ? 2.0f : -2.0f);
|
||||
@ -64,24 +64,24 @@ int main()
|
||||
if (i.vy == 0)
|
||||
i.vy = 3;
|
||||
|
||||
// 小球的图像块设置
|
||||
// 小球的图像块设置
|
||||
i.img.CreateCanvas(RADIUS * 2, RADIUS * 2);
|
||||
i.img.GetCanvas()->Clear();
|
||||
i.img.GetCanvas()->SolidCircle(RADIUS, RADIUS, RADIUS, true, rand() % 0xffffff);
|
||||
ReverseAlpha(i.img.GetCanvas()->GetBuffer(), i.img.GetCanvas()->GetBufferSize());
|
||||
|
||||
// 设置图像块透明度
|
||||
// 设置图像块透明度
|
||||
i.img.alpha = 200;
|
||||
i.img.bUseSrcAlpha = true;
|
||||
|
||||
// 加入图像块到图层
|
||||
// 加入图像块到图层
|
||||
layer.push_back(&i.img);
|
||||
}
|
||||
|
||||
// 加入图层到场景
|
||||
// 加入图层到场景
|
||||
scene.push_back(&layer);
|
||||
|
||||
// 主循环(窗口关闭或按下按键时退出)
|
||||
// 主循环(窗口关闭或按下按键时退出)
|
||||
while (wnd.IsAlive() && !peekmessage(nullptr, EM_CHAR))
|
||||
{
|
||||
for (auto& i : balls)
|
||||
@ -89,7 +89,7 @@ int main()
|
||||
i.x += i.vx;
|
||||
i.y += i.vy;
|
||||
|
||||
// 碰撞判定
|
||||
// 碰撞判定
|
||||
if (i.x - RADIUS < 0)
|
||||
{
|
||||
i.x = RADIUS;
|
||||
@ -111,24 +111,25 @@ int main()
|
||||
i.vy = -i.vy;
|
||||
}
|
||||
|
||||
// 更新位置
|
||||
// 更新位置
|
||||
i.img.SetPos((int)i.x - RADIUS, (int)i.y - RADIUS);
|
||||
}
|
||||
|
||||
if (wnd.BeginTask())
|
||||
{
|
||||
// 渲染场景
|
||||
// 渲染场景
|
||||
scene.Render(canvas.GetImagePointer(), show_outline);
|
||||
|
||||
// 手动刷新双缓冲
|
||||
// 手动刷新双缓冲
|
||||
//wnd.FlushDrawing();
|
||||
|
||||
wnd.EndTask();
|
||||
wnd.Redraw();
|
||||
}
|
||||
|
||||
// 平衡帧率
|
||||
hiex::DelayFPS(24);
|
||||
// 平衡帧率
|
||||
static hiex::tDelayFPS recond;
|
||||
hiex::DelayFPS(recond, 24);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user