标题:求助,DrawString时, 如何精确,设置字体大小,和字符串输入坐标。。。
只看楼主
追梦人zmrghy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:399
专家分:190
注 册:2021-4-9
结帖率:97.22%
已结贴  问题点数:20 回复次数:6 
求助,DrawString时, 如何精确,设置字体大小,和字符串输入坐标。。。

求助,DrawString时, 如何精确,设置字体大小,和字符串输入坐标。。。
想做一个,数字小游戏。基本模型已经写好。模块功能代码还没写完。
  


  


  


 System::Drawing::Graphics
void DrawString(System::String^ s, System::Drawing::Font^ font, System::Drawing::Brush^ brush, System::Drawing::PointF point)

游戏当前效果, 还没完成。。。
录像4.rar (2.97 MB)


先说一下,绘制数字块的思路。
1. 例如3X3九宫格。在计算每格宽和输入坐标时难免出现被省掉的小数。
2. 例如,总宽、总高600X600,  600像素在计算机中为0~599. 习惯中计算就是用600计算。
3,在绘制内容的计算中,加都加,减都减,乘都乘,除都除,产生的误差就会相互抵消。成为“0"误差”。
4,在绘制,表格线,绘制“数字块”,移动数字块”会出现四则混合运算,误差很难做到相互抵消。

总上所述,正负1像素的误差,在所难免。。。
绘制数字,如果只绘制数字块,空格放置放置数字时没问题,如果移动数字块,或者俩个数字块互换时,出现误差。
数字块,边缘不能完全重合。就太难看了。
如果,先绘制单元格大小背景色,再绘制数字块,之前的数字块完全被遮盖。
如何绘制单元格大小背景色,出了误差。单元格线条被遮盖就更加难看了。。。。。

我们绘制数字块的方案。。。。

1. 新建,宽、高和单元格相等的空白图片,
2. 在图片中央绘制,宽、高均为图片宽、高90%的背景色正方形。
3. 上,下,左,右。5%的空白透明区。
4. 在图片中央绘制,直径为图片宽、高80%的黑色圆。
5. 在图片中央绘制,大小适中,数字。。。


  

效果如图,为展示上,下,左,右。5%的空白透明区,
绘制正方形颜色和背景色不同,使用时绘制相同颜色就可以了。。。。。

完美方案,完美主义者(脱了裤子放屁、强迫症患者)的追求。。。。。
只要,写程序时思路清晰。电脑计算,误差完全可以做到相互抵消。。。成为“0"误差”。
如果,写程序。迷迷糊糊(满脑子浆糊)正负1像素的误差,是天经地义的。。。。。。


遇到了一个难道了。
1. 绘制数字时,如何精确,设置字体大小,和输入坐标。
2. 现在,用的是1位数,编写测试的。当出现2位数,3位数时如何精确,设置字体大小,和输入坐标。

用编制数字块函数, 又写一小程序,方便大家,帮我分析调式。。。。

DrawNumber.rar (4.62 MB)
搜索更多相关主题的帖子: 数字 输入 坐标 大小 绘制 
2022-07-15 20:24
追梦人zmrghy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:399
专家分:190
注 册:2021-4-9
得分:0 
还是,没人回答呀!!!
2022-07-17 17:31
apull
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:三体星系
等 级:版主
威 望:185
帖 子:1404
专家分:8479
注 册:2010-3-16
得分:14 
C++/CLR的没多少人用。
2022-07-17 20:31
追梦人zmrghy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:399
专家分:190
注 册:2021-4-9
得分:0 
回复 3楼 apull
语法和c++相似。功能和C#相似。
我用它,感觉Form窗体界面设计,比C++MFC窗体界面设计简单了。。。
语法和代码C++相似。。。

Form窗体界面设计,和C#Form窗体界面设计相似。。
但是,不习惯C#的语法。。。
2022-07-18 00:25
apull
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:三体星系
等 级:版主
威 望:185
帖 子:1404
专家分:8479
注 册:2010-3-16
得分:0 
.net有设置字符串水平居中和垂直居中的方法,下面是C#代码
StringFormat stringFormat= new StringFormat();
stringFormat.Alignment = StringAlignment.Center;
stringFormat.LineAlignment = StringAlignment.Center;

public void DrawString (string s, System.Drawing.Font font, System.Drawing.Brush brush, System.Drawing.RectangleF layoutRectangle, System.Drawing.StringFormat format);
2022-07-18 11:41
追梦人zmrghy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:399
专家分:190
注 册:2021-4-9
得分:0 
以下是引用apull在2022-7-18 11:41:37的发言:

.net有设置字符串水平居中和垂直居中的方法,下面是C#代码
StringFormat stringFormat= new StringFormat();
stringFormat.Alignment = StringAlignment.Center;
stringFormat.LineAlignment = StringAlignment.Center;

public void DrawString (string s, System.Drawing.Font font, System.Drawing.Brush brush, System.Drawing.RectangleF layoutRectangle, System.Drawing.StringFormat format);


照样,不会用。。。。。

200X200的图片框。
200X200的图片
200P 字体

还是不能居中显示





[此贴子已经被作者于2022-7-19 22:45编辑过]

2022-07-19 22:44
apull
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:三体星系
等 级:版主
威 望:185
帖 子:1404
专家分:8479
注 册:2010-3-16
得分:0 
左右居中了。
这个字体大小设置的是宽度,而字体高度drawFont.height是要大于宽度的。不同字体这个高度也不一样。
2022-07-20 09:16



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-509574-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.480686 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved