HiEasyX  Ver 0.3.0
EasyX 全面扩展库
main.cpp 文件参考
#include "HiEasyX.h"

浏览源代码.

struct  Ball
 

宏定义

#define BALL_NUM   14
 透明小球边界碰撞示例 更多...
 
#define RADIUS   70
 

函数

int main ()
 

变量

hiex::SysButton btn
 
bool show_outline = false
 

宏定义说明

◆ BALL_NUM

#define BALL_NUM   14

透明小球边界碰撞示例

注解
此示例用于演示 HiCanvas 的透明通道、场景和图层
作者
huidong mailh.nosp@m.uid@.nosp@m.163.c.nosp@m.om
日期
2023.01.12

在文件 main.cpp11 行定义.

◆ RADIUS

#define RADIUS   70

在文件 main.cpp14 行定义.

函数说明

◆ main()

int main ( )

在文件 main.cpp27 行定义.

28 {
29  hiex::Window wnd(640, 480); // 创建窗口
30  hiex::Canvas canvas; // 创建画布对象
31  wnd.BindCanvas(&canvas); // 将窗口和画布绑定
32 
33  // 手动刷新双缓冲
34  //hiex::EnableAutoFlush(false);
35 
36  canvas.Clear(true, BLACK); // 设置背景色为黑色,清空画布
37 
38  // 创建按钮,用于点击设置是否显示轮廓
39  btn.Create(wnd.GetHandle(), 50, 50, 120, 30, L"Hide outline");
40  btn.RegisterMessage([]() {
42  btn.SetText(show_outline ? L"Show outline" : L"Hide outline");
43  });
44 
45  // 初始化随机数
46  srand((UINT)time(nullptr));
47 
48  hiex::Scene scene; // 场景
49  hiex::Layer layer; // 图层
50 
51  Ball balls[BALL_NUM]; // 小球
52 
53  // 初始化小球
54  for (auto& i : balls)
55  {
56  // 位置和速度的初始化
57  i.x = (float)(rand() % canvas.GetWidth());
58  i.y = (float)(rand() % canvas.GetHeight());
59  i.vx = rand() % 5 * (rand() % 2 ? 2.0f : -2.0f);
60  i.vy = rand() % 5 * (rand() % 2 ? 2.0f : -2.0f);
61  if (i.vx == 0)
62  i.vx = 3;
63  if (i.vy == 0)
64  i.vy = 3;
65 
66  // 小球的图像块设置
67  i.img.CreateCanvas(RADIUS * 2, RADIUS * 2);
68  i.img.GetCanvas()->Clear();
69  i.img.GetCanvas()->SolidCircle(RADIUS, RADIUS, RADIUS, true, rand() % 0xffffff);
70  ReverseAlpha(i.img.GetCanvas()->GetBuffer(), i.img.GetCanvas()->GetBufferSize());
71 
72  // 设置图像块透明度
73  i.img.alpha = 200;
74  i.img.bUseSrcAlpha = true;
75 
76  // 加入图像块到图层
77  layer.push_back(&i.img);
78  }
79 
80  // 加入图层到场景
81  scene.push_back(&layer);
82 
83  // 主循环(窗口关闭或按下按键时退出)
84  while (wnd.IsAlive() && !peekmessage(nullptr, EM_CHAR))
85  {
86  for (auto& i : balls)
87  {
88  i.x += i.vx;
89  i.y += i.vy;
90 
91  // 碰撞判定
92  if (i.x - RADIUS < 0)
93  {
94  i.x = RADIUS;
95  i.vx = -i.vx;
96  }
97  if (i.x + RADIUS > canvas.GetWidth())
98  {
99  i.x = (float)canvas.GetWidth() - RADIUS;
100  i.vx = -i.vx;
101  }
102  if (i.y - RADIUS < 0)
103  {
104  i.y = RADIUS;
105  i.vy = -i.vy;
106  }
107  if (i.y + RADIUS > canvas.GetHeight())
108  {
109  i.y = (float)canvas.GetHeight() - RADIUS;
110  i.vy = -i.vy;
111  }
112 
113  // 更新位置
114  i.img.SetPos((int)i.x - RADIUS, (int)i.y - RADIUS);
115  }
116 
117  if (wnd.BeginTask())
118  {
119  // 渲染场景
120  scene.Render(canvas.GetImagePointer(), show_outline);
121 
122  // 手动刷新双缓冲
123  //wnd.FlushDrawing();
124 
125  wnd.EndTask();
126  wnd.Redraw();
127  }
128 
129  // 平衡帧率
130  hiex::DelayFPS(24);
131  }
132 
133  return 0;
134 }

变量说明

◆ btn

在文件 main.cpp24 行定义.

◆ show_outline

bool show_outline = false

在文件 main.cpp25 行定义.

HiEasyX::Canvas::GetHeight
int GetHeight() const
Definition: HiCanvas.h:282
ReverseAlpha
DWORD * ReverseAlpha(DWORD *pBuf, int size)
Definition: HiFunc.cpp:37
HiEasyX::Window
窗口
Definition: HiWindow.h:118
Ball::x
float x
Definition: main.cpp:20
BALL_NUM
#define BALL_NUM
透明小球边界碰撞示例
Definition: main.cpp:11
HiEasyX::Canvas::GetImagePointer
IMAGE * GetImagePointer()
Definition: HiCanvas.h:257
btn
hiex::SysButton btn
Definition: main.cpp:24
HiEasyX::DelayFPS
void DelayFPS(int fps, bool wait_long)
根据目标帧率延时
Definition: HiFPS.cpp:11
HiEasyX::Scene::Render
void Render(IMAGE *pImg=nullptr, bool bShowAllOutline=false, bool bShowAllText=true)
渲染到画布
Definition: HiCanvas.cpp:2028
RADIUS
#define RADIUS
Definition: main.cpp:14
HiEasyX::Canvas
画布
Definition: HiCanvas.h:117
peekmessage
#define peekmessage
Definition: HiWindow.h:870
HiEasyX::Canvas::Clear
void Clear(bool isSetColor=false, COLORREF bkcolor=BLACK)
Definition: HiCanvas.cpp:465
Ball
Definition: main.cpp:17
HiEasyX::SysControlBase::Create
HWND Create(HWND hParent, RECT rct, std::wstring strText=L"")
Definition: SysControlBase.cpp:58
HiEasyX::Layer
图层
Definition: HiCanvas.h:835
HiEasyX::SysControlBase::SetText
void SetText(std::wstring wstr)
Definition: SysControlBase.cpp:137
show_outline
bool show_outline
Definition: main.cpp:25
HiEasyX::Canvas::GetWidth
int GetWidth() const
Definition: HiCanvas.h:281
HiEasyX::Scene
Definition: HiCanvas.h:876
HiEasyX::SysButton::RegisterMessage
void RegisterMessage(void(*pFunc)())
注册点击消息
Definition: SysButton.cpp:48