| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4229 人关注过本帖, 2 人收藏
标题:求助!!!
只看楼主 加入收藏
ppfly
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:297
专家分:1956
注 册:2009-5-17
收藏
得分:11 
可以先弄清楚几个概念(或技术),帧,双缓冲,等。

********多贴代码,少说空话*******
2012-05-14 18:46
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 11楼 ppfly
大侠 我现在已经做好了一个 间断框
图片附件: 游客没有浏览图片的权限,请 登录注册

我就是不知道当我点击棋子位图时 怎么和这个位图发生联系 然后把这个框加到他上面 如果鼠标点击的地方没有棋子就不做加 而是移动(当然是复活规则的移动)。

是不是要记录每个棋子位图的原始区域(裁剪区域)然后和鼠标点击的坐标做比较?想了半天搞不通啊

梅尚程荀
马谭杨奚







                                                       
2012-05-14 18:58
ppfly
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:297
专家分:1956
注 册:2009-5-17
收藏
得分:0 
用新位图覆盖,

********多贴代码,少说空话*******
2012-05-14 19:12
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:11 
呵呵,有容最近的学习好像遇到瓶颈了。想要一段C#的示例吗?

重剑无锋,大巧不工
2012-05-14 20:42
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 14楼 beyondyf
杨大哥好啊
很想呢 如果能看懂C#实例的大概流程 就可以借鉴吧
能给个吗

梅尚程荀
马谭杨奚







                                                       
2012-05-14 21:02
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 9楼 有容就大
主要原因是你没有面向对象的编程思维,采用的基本上是面向过程的方法。看看如下问题:

1.你现在知道鼠标移动时,它激发的消息发送到哪里、你能接收它吗?
2.如果你能随时检测到鼠标的位置,那么就可以设置鼠标移动的事件代码,当鼠标坐标符合特定条件时,就自己发送一条消息,设置某个全局变量。
3.上面第2步的全局变量,正是控制现在要处理哪个格子的ID,相对于对象句柄。

有了上面3个前提,你就可以把棋盘划分为90个单元格,每个单元格都是一个对象(我不知道你是否有使用Image Control那样的经验),而这90格对象都是从同一个类中生成的实例,即90个对象的代码都是集中在一起的,相当于你一段代码同时控制着90个不同的格子,这才是面向对象的真正作用,是你用面向过程思维很难处理的。

只要你前面的鼠标移动事件设定某个单元格为活动,代码类似Grid[i,j].SetFocus,就表示此时类代码中的处理对象是实例Grid[i,j],此时切换这个单元格的图像,就改变了这个单元格的棋子,而不会影响到其他棋子。

这样,你所要做的,就是设计一个Image Control,它是一个60*60像素的方框,属性有诸如Top、Left、Width、Height(棋格位置和尺寸)、BackImageUrl(棋格背景图)、ChessPieces(棋子代码用于提取棋子)、Actived等等一切需要用到的东西,想到什么就加什么。用这个类创建Grid[10,9]共90个实例,初始化成一张棋盘。注意这时棋格的位置是非常有规律的,鼠标活动事件函数极容易知道自己落在哪个格子上,一落下去,就可以设置对应格子的Grid[i,j].Actived = True。处理的过程,就由鼠标移动事件来控制,只要鼠标所在的棋格有棋子,有可以被提起、改变棋子,这个棋格自己改变棋子的图案,用自己的位置尺寸来显示,根本不用管它实际上是棋盘上的哪一个格子,也不需要知道自己的尺寸到底有多大,只要显示棋子的函数把读入的图像BitMap缩放到属性标注的Width*Height就可以了。

这样,棋局处理逻辑和显示界面就分离了。不管将来你把棋子改成怎样的图案、棋格的尺寸如何变化,都不会影响逻辑处理过程。

Image Control的实质,不过是窗体中的子窗体,可以在子窗体上面放置图案,它本身也有一系列跟窗体一样的消息感应机制,做到最前面那3点前提,就知道如何去做(其实知道子窗体,就算不用鼠标感应,子窗体自己本身也有鼠标MouseMove消息,它自己知道是否鼠标进入自己的范围,连鼠标移动处理函数都不用,这看你了解什么手段了)。实际上,你平时就应该封装一系列这样的控件。可以在做这个项目的过程中开始做这些控件,也可以摸索现成有什么控件可供使用,参照一下别的语言、别的环境中有什么好用的方法,用自己懂的方法仿做一个。你没见过Image Control那样的东西,自然不知道有这样的思路,说到底,还是应该开阔眼界为是。在别的高级语言中,只要是GUI编程,基本上都有这种控件可供使用,在这方面,死守C、API是没有必要的,你再做得来,也不过是重复别人已经做得很好的东西罢了。精力应该花在思考上面所说那样的思路上,而不是花在如何把BitMap显示到什么地方那样的细节上。

没有高级的应用基础,就着手碰底层,当然什么思路都没有。只要高层应用无法解决的东西,才需要考虑底层辅助,而现实中这种需求极少,何况你连高层应用的经验都没有。

[ 本帖最后由 TonyDeng 于 2012-5-14 21:06 编辑 ]

授人以渔,不授人以鱼。
2012-05-14 21:03
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 15楼 有容就大
呵呵,等我找些素材图片。你是不是还想实现棋子移动的动画过程?

重剑无锋,大巧不工
2012-05-14 21:13
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 17楼 beyondyf
嗯 如果有更好 哈哈

梅尚程荀
马谭杨奚







                                                       
2012-05-14 21:18
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 16楼 TonyDeng
看完这么多讲解 很受启发 也就是说我在主窗口创建裁剪区域来传输位图有很大的缺陷哦
按你说的要创建一个个60 * 60 像素的子窗口控件来实现 是不是?

梅尚程荀
马谭杨奚







                                                       
2012-05-14 21:24
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
好吧。这需要点时间。不过完成后,达到你要的效果的话,我要收你这贴所有的分数哦

重剑无锋,大巧不工
2012-05-14 21:26
快速回复:求助!!!
数据加载中...
 
   



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

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