请教C#计时器和销毁图片

@未来在哪里 2020-06-22 04:27:51
...全文
17436 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
拉文麦克 2020-12-14
  • 打赏
  • 举报
回复
如果做游戏,可以考虑用Unity3D,一样可以做2D游戏,C#有个销毁方法,基本每个类都有,Dispose()。
八爻老骥 2020-12-11
  • 打赏
  • 举报
回复
游戏逻辑要与渲染分开,渲染过程是轮循的过程,一个无限循环的Render方法,不停地获取当前画面的图形数据,然后用GDI/GDI+、D2D/D3D、OpenGL等画出来。picturebox有点重,用Rectangle结构就行了,用Rectangle.Contains()方法就可以判断两个矩形间的位置关系。图像可以用全局的Image对象预加载,需要呈现的时候设为可见就行了。
dugupiaoyun 2020-12-11
  • 打赏
  • 举报
回复
一般我们是在picturebox上或者窗体上绘图,很少是用picturebox装载一张图片去移动的,这样做图形移动很别扭不连贯而且太生硬。 利用Graphics绘图,图片平移可以用e.Graphics.TranslateTransform(100.0F, 0.0F),旋转可以用e.Graphics.RotateTransform(30.0F, MatrixOrder.Prepend)等。不过要做游戏,最好还是DirectX
@未来在哪里 2020-12-07
  • 打赏
  • 举报
回复
引用 5 楼 以专业开发人员为伍 的回复:
在设计软件时,要从界面(页面、自定义控件)层面来设计各种 UI 组件的逻辑关联,要设计各种 ViewModel 对象实例的关联关系,要设计 API 接口,要设计用例和主要对象的生存期(时序)关系,更要先在“纸面上”推导各类状态(机)转移图是否能涵盖所有需求。当考虑软件从2、3中简单的精灵到复杂的几十种几百种精灵时,要分层次地深入扩展,设计好接口扩展,把上述所有“不同维度的文档”扩展到不同深度的子类上。好比如说“ATM机和信用卡的交互流程”,世界上如果有500种ATM机和1000种信用卡,那么你不需要写50万种程序代码,你需要抽象两种对象的交互流程,再把ATM机的第二级分类模型做扩展,把信用卡的第二级、第三级分类做扩展。你仅仅需要设计每一种“扩展子类”与父类的个性化区别,这样你仅需要写很少的代码就能说明的许多种类具体对象的交互操作逻辑。

要适当的地抽象。抽象化和具体化能看出一个人是否在前期对领域的研究和设计方面下了足够的功夫。
谢谢
  • 打赏
  • 举报
回复
在设计软件时,要从界面(页面、自定义控件)层面来设计各种 UI 组件的逻辑关联,要设计各种 ViewModel 对象实例的关联关系,要设计 API 接口,要设计用例和主要对象的生存期(时序)关系,更要先在“纸面上”推导各类状态(机)转移图是否能涵盖所有需求。当考虑软件从2、3中简单的精灵到复杂的几十种几百种精灵时,要分层次地深入扩展,设计好接口扩展,把上述所有“不同维度的文档”扩展到不同深度的子类上。好比如说“ATM机和信用卡的交互流程”,世界上如果有500种ATM机和1000种信用卡,那么你不需要写50万种程序代码,你需要抽象两种对象的交互流程,再把ATM机的第二级分类模型做扩展,把信用卡的第二级、第三级分类做扩展。你仅仅需要设计每一种“扩展子类”与父类的个性化区别,这样你仅需要写很少的代码就能说明的许多种类具体对象的交互操作逻辑。

要适当的地抽象。抽象化和具体化能看出一个人是否在前期对领域的研究和设计方面下了足够的功夫。
  • 打赏
  • 举报
回复
软件设计要分层次、抽象和具体相结合,要从行业(领域)知识实践架构中来,要设计,要一下子就能进入行业的核心设计概念。避免自己猜。
  • 打赏
  • 举报
回复
大致来说,所有的“动的”东西都叫做 spirit(精灵),它有相关的“状态”属性,“方向”属性,也有相关的“移动到下一帧”的动作操作,“与其它其精灵碰撞”操作。地图上所有的动对的东西,例如各种主角,包括子弹,包括一颗树、一片云,都可以作为精灵的子类对象。例如你可以为的地图创建一个 List<spirit> 集合来保存所有精灵。而定时器触发地图上所有精灵移动到下一帧,并且当移动之后要检测精灵的外边框(多边形边框)是否与其它精灵有同一个点被同时命中,如果有重合的点则触发碰撞方法。

设计一个系统,要抽象主要的结构和主要的流程。高层次的东西总是很简洁的,例如流程中可以处理地图上几万个精灵,而不是直接“写死”什么子弹和僵尸。
@未来在哪里 2020-12-05
  • 打赏
  • 举报
回复
引用 1 楼 desperaso的回复:
学习时间不长,个人理解,参考。
这种东西用c#winform的PictureBox图像组件做肯定没法看。
winform的话,怎么得有个class吧,比如
public class DraggableObject
{
public string Id { get; set; }
public int prim_X { get; set; }
public int prim_Y { get; set; }
public Rectangle Region { get; set; }
public Bitmap Setimage { get; set; }
public void OnPaint(PaintEventArgs e)
{

e.Graphics.DrawImage(SetImage, Region);
}
}
public List<DraggableObject> DesignObjects = new List<DraggableObject>();
记录一些位置啊参数什么的,增加图像List.add,删除图像List.remove,
更新、删除、增加图相或位置变动了,刷新一下容器。
private void xx_Paint(object sender, PaintEventArgs e)
{
foreach (DraggableObject item in DesignObjects)
{
item.OnPaint(e);
}
}
不过,这种东西一定c#搞,还是wpf吧。或unity3D试试
谢谢
desperaso 2020-06-23
  • 打赏
  • 举报
回复
学习时间不长,个人理解,参考。
这种东西用c#winform的PictureBox图像组件做肯定没法看。
winform的话,怎么得有个class吧,比如
public class DraggableObject
{
public string Id { get; set; }
public int prim_X { get; set; }
public int prim_Y { get; set; }
public Rectangle Region { get; set; }
public Bitmap Setimage { get; set; }
public void OnPaint(PaintEventArgs e)
{

e.Graphics.DrawImage(SetImage, Region);
}
}
public List<DraggableObject> DesignObjects = new List<DraggableObject>();
记录一些位置啊参数什么的,增加图像List.add,删除图像List.remove,
更新、删除、增加图相或位置变动了,刷新一下容器。
private void xx_Paint(object sender, PaintEventArgs e)
{
foreach (DraggableObject item in DesignObjects)
{
item.OnPaint(e);
}
}
不过,这种东西一定c#搞,还是wpf吧。或unity3D试试

110,532

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧