none
求助 ,想实现 显示 几何图形 ,并实现 他们之间的 对接 RRS feed

  • 问题

  •  想搞一个 拼图的 游戏, 里面的 图片 都是 不规则的 ,都是 要 pictureBox1 的话,图片与 图片 之间 就有了 重复覆盖的 效果 , 这点不是 很好 
    失去了 拼图的 意义。希望 使用wpf 可以实现  , 不规则 图片的  完美 对接 , 不会 覆盖的 效果。希望 高手大虾们,帮助一下·········

           还有就是 做好了这样的 控件 ,咋样 用到 普通的 cs项目中 呀

    2011年5月31日 2:29

答案

  • 他们两者差别太大了,WPF使用了DirectX技术去实现图形化的绘制,而winform还是GDI模式。在同一个GDI中,有了Layed样式的窗体可以设置透明色,但是GDI限制了这种模式下,只能有一种颜色是透明的,而且这种颜色必须是全透明,所以一旦你的PictureBox中的背景色透明后,整个背景色后面的窗体也会被透明化掉。 这个是无法解决的,而DirectX就可以很好的解决这个问题,不同层次的对象是统一地根据颜色位置像素绘制到显示设备缓存,然后同一辈绘制到屏幕上,各个元素间可以相互显示出层次分明的半透明效果。

    根据你的描述,如果你要使用Winform,那么你应该试图使用GDI去一个个绘制不规则的图形,去包裹图片,而不是用PictureBox。因为不规则图形之间可以接合,PictureBox永远会有一个矩形外框。

    如果先择WPF,你也可以用绘制不规则图形的方法,当然你也可以使用Image,因为我们可以将Image背景设置为透明而不会影响Image后面的窗体。

    再有,我们还可以用WPF设计好了内容通过ElementHost内嵌到Winform窗体中。

     

    Sincerely,


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 鸿硕 2011年6月1日 0:30
    • 取消答案标记 鸿硕 2011年6月1日 0:41
    • 已标记为答案 Jie BaoModerator 2011年6月1日 6:19
    2011年5月31日 9:18
    版主

全部回复

  • 你提出了一个需求,但是你所迷糊的是具体的设计。 我们在这里可以给你一个方向,但是很遗憾的是,很难觊觎你的需求给你一个做好的方案的,毕竟你的需求比较大,而且涉及东西湖有点多。比如基础技术的选择,交互上,数据上,流程上都是还没有指定的。

     

    如果你选择WPF技术,那么你可以先学习WPF的布局系统,它提供了很多种灵活的布局,而且同时也允许用户自定义布局。关于布局系统MSDN官方又文档介绍,当然我相信任何一本WPF书中都会有详细介绍。MSDN:http://msdn.microsoft.com/zh-cn/library/ms745058.aspx

     

    然后,你就需要去了解什么是点击测试,去设计每一个不规则图形,当我们鼠标拖动图形时,需要点击测试来判定是否可以对接。每个图形有他的热点感应区,只要另外一个图形的边缘到达这个区域,就触发判断,判定是否这两个图形的这两条边可以接合。

     

    .Net项目中,只要你引用了相应的程序集,就可以使用里面的控件。在XAML中,至多需要做一次XAML Mapping , 比如 声明 xmlns:xxx="clr-namespace:abc" 就把你所引用的abc名字空间的类映射到了xxx xml名字空间中,我们就可以 用  xxx:class 在XAML访问abc中的class类了。

     

    最后,找到两个WPF拼图项目,供你参考学习:

     

    Sincerely,


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年5月31日 3:48
    版主
  • 首先,特别的感谢 您的帮助, 那么   我们先放弃 上面的问题, 看看这样的 该 咋样解决 。 pictureBox1 是有 背景色的 放置两个 pictureBox 如果 重叠的话 ,就 会覆盖,。那么 怎样设置  ,pictureBox 就会变成 透明的 呢, 重叠  就不会 覆盖!
    2011年5月31日 5:08
  • 你好,

    WPF中是没有PictureBox的,我觉得你是在说WinForm技术下的控件。 在WPF中 用Image组件来呈现图片。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年5月31日 5:42
    版主
  • 您好: 恩,是的 ,我最终的 目的是 想实现 在 winform 技术 下的 控件 PictureBox 的 重复 不覆盖 ,之前自己做了一段时间 ,没有 解决。 所以想换一个 思路 就是 利用 wpf 的思想, 解决这样 一个 问题 。 所以 我想在还是 不敢确定 可不可以 使用 WPF中 的 image 组件 来实现 ,不规则图片 拼合 不会出现 覆盖的效果。 另外 ,如果 可以实现的话,那么 能不能 做成 一个 在winform 下 也可以 别调用的 控件。 我的 主要意思是这样的。 谢谢您的帮助!

     

     

     


    • 已编辑 鸿硕 2011年5月31日 9:31
    • 已标记为答案 鸿硕 2011年6月1日 8:28
    • 取消答案标记 鸿硕 2011年6月1日 8:28
    2011年5月31日 8:54
  • 他们两者差别太大了,WPF使用了DirectX技术去实现图形化的绘制,而winform还是GDI模式。在同一个GDI中,有了Layed样式的窗体可以设置透明色,但是GDI限制了这种模式下,只能有一种颜色是透明的,而且这种颜色必须是全透明,所以一旦你的PictureBox中的背景色透明后,整个背景色后面的窗体也会被透明化掉。 这个是无法解决的,而DirectX就可以很好的解决这个问题,不同层次的对象是统一地根据颜色位置像素绘制到显示设备缓存,然后同一辈绘制到屏幕上,各个元素间可以相互显示出层次分明的半透明效果。

    根据你的描述,如果你要使用Winform,那么你应该试图使用GDI去一个个绘制不规则的图形,去包裹图片,而不是用PictureBox。因为不规则图形之间可以接合,PictureBox永远会有一个矩形外框。

    如果先择WPF,你也可以用绘制不规则图形的方法,当然你也可以使用Image,因为我们可以将Image背景设置为透明而不会影响Image后面的窗体。

    再有,我们还可以用WPF设计好了内容通过ElementHost内嵌到Winform窗体中。

     

    Sincerely,


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 鸿硕 2011年6月1日 0:30
    • 取消答案标记 鸿硕 2011年6月1日 0:41
    • 已标记为答案 Jie BaoModerator 2011年6月1日 6:19
    2011年5月31日 9:18
    版主
  • 你好 :

          我们还可以用WPF设计好了内容通过ElementHost内嵌到Winform窗体中。 

               具体的我该 怎样实现呢,对于初学者,希望您 还可以 多多帮助, 。

             下面我把 我最终 要实现额 效果 图片 传一下,看到 图片会更加的 好 理解我的原意 。

          这个 连接 是第一张图片的效果 ,一个桌子,和一个 凳子  

           http://hi.baidu.com/%BA%E8%CB%B6%BC%D2%D4%B0/album/item/b5b445db5319690895ee37ba.html 

                 当 把 凳子 向 桌子 那边移动的时候  ,那个 桌子就 开始 覆盖  凳子。下面的 图片 就是 显示这个问题的 


                http://hi.baidu.com/%BA%E8%CB%B6%BC%D2%D4%B0/album/item/b929cadc4286e4b538012fba.html


      最终 桌子和凳子 还没有 完全 靠在一起, 桌子就把 凳子,给 覆盖的差不多了 


     http://hi.baidu.com/%BA%E8%CB%B6%BC%D2%D4%B0/album/item/81b5f9c70ef46069e4dd3bba.html

     就是  想 解决这样的 一个 问题 。 当凳子向 桌子   靠近的 时候 不会出现  覆盖 


    2011年6月1日 0:41
  • > 具体的我该 怎样实现呢,对于初学者,希望您 还可以 多多帮助.

    MSDN文档中有详细解释和例子:http://msdn.microsoft.com/zh-cn/library/ms751797.aspx
    一些WPF书上也会有相关章节的。

     

    关于你那几张图的现象,如果你把本来那几个图片的背景色设置为透明,比如png gif格式就支持透明背景的,在WPF中,只需要分别用Image承载他们就可以了。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年6月1日 6:19
    版主