Windows8 游戏开发教程一、Metro UI 和绘图

摘要:
子控件的定位方法根据容器控件的特性确定。显示TextTextBox文本编辑框图像图片控件按钮控件可以指定wpf/silverlight的属性和事件集。使用MetroUI的程序由应用程序启动。运行,然后将Loaded事件添加到MainPage以开始编写初始化代码。

仔细想了想,叫做教程似乎不太合适,应该算作一种讨论。

windows 8 已经玩了一段日子,相信大家对Metro UI已经不陌生了。

Metro UI的介绍 我想很简单就可以带过了。

首先是布局方式,采用XAML布局,虽然外观看起来简单过了头,这是从zune 和wp7 那里继承来的风格。

没有窗口概念,取而代之的是Page。下一层次是控件,容器控件可以放子控件。

根据容器控件的特征决定子控件的定位方法。

有几个常用容器控件:grid,border,canvas

canvas是坚决从左上角按照 像素定位。

grid是划分成几个行列区域,将子控件布置在内,然后可以选择停靠方向和偏移,很近似 html的定位方法。

border子控件自动填满。

常用功能控件

TextBlock  标签控件,显示文本

TextBox    文本编辑框

Image       图片控件

Button      按钮

控件可以指定属性和事件

wpf/silverlight 那一套,Metro UI 介绍完毕。

使用MetroUI的程序是用application.Run 启动的,不用关心怎么调用的,虽然你也可以重写Main函数。

创建一个c# 的 black page 项目,都会自动建立好,然后给MainPage添加一个Loaded事件就可以开始写初始化代码了。

关于绘图,windows8 还没有提供XNA,看看现在winmd的广泛使用,我们不用等XNA了,自己弄一个吧。

windows8 给出了Dx的示例,不过是用c++编写的,c++的执行效率高,开发效率让人非常苦恼。所以我们要把绘图接口整回到c#来。

windows8 给出的DX示例是工作在coreapplication框架下的,xaml神马的都不能用,那种方式UI、神马神马的,全部都得用DX绘制出来。

我并不喜欢这个方式,我很想用xaml做游戏界面,所以我们要想点办法,不放弃界面,还要用DX。

于是,我们做到了。

用c++ 做一个封装,封装成winmd形式,先来看一下示例(svn地址图里找

image image

win8clgc = crazylights graphics core

图形核心,基本绘图方法。先弄个2D的,3D我没打算裸奔DX,回头看看有没有代码量不大的开源引擎,直接并一个进去。

如果你只是需要一个 win8 可用,c#可调用,高性能的绘图功能,那只虚熟悉下clgc的接口即可。

目前已封装了D2D和DWrite的部分功能。

svn 地址如图

win8clgf  = crazylights graphics framework

图形框架,目前只实现了一个接口,把RenderTarget的内容 复制到 Image控件中。

以后在这里丢一些界面系统、2D场景、精灵系统神马的。

使用时仅需三步

1.引用 win8clgc.winmd

image

2.初始化clgc,建议给MainPage添加一个Loaded事件做初始化

image

3.编写逻辑,如果需要update,建议使用DispatcherTimer,因为只有在主线程上才能更新Image控件,即使新开线程更新,帧数还是被主线程限制。

imageimage

只要CopyImage 就会将绘制内容显示到Image控件中,copyImage的实现很简单,你也可以不引用clgf,直接把copy功能包括在你的项目中,bytes在隐藏的部分代码中由rendertarget返回。

目前的Render接口

image

可以看到提供了两组DrawBitmap和DrawText接口,有兴趣可以自己测试了。

测试程序效果图

image

绿色背景区为实时绘制

免责声明:文章转载自《Windows8 游戏开发教程一、Metro UI 和绘图》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇20145322《网络对抗技术》免杀原理与实践Jmeter自动化测试 数据驱动测试,将数据存入csv文件中来调用,或将数据存在DB中进行调用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Python学习日记(十九) 模块导入

模块导入 当文件夹中有这样一个自定义的command模块 在它的内部写下下列代码: print('这个py文件被调用!') def fuc(): print('这个函数被调用!') 然后我们在command模块中执行下列代码: import command #这个py文件被调用! 我们如果在这段程序中反复执行多次这一段代码,这一个文...

Windows平台如何集成RTSP/RTMP直播播放功能

前段时间,我们在 https://blog.csdn.net/renhui1112/article/details/104143794 提到“RTSP播放器开发过程中需要考虑哪些关键因素”,本次主要介绍,如何调用SDK实现RTSP/RTMP播放能力。本文以调用大牛直播SDK为例: demo说明 SDK提供C++/C#两套接口,对外提供32/64位库,C...

后端线上服务监控与报警方案

一、背景 1、上线期间服务稳定性观察较困难 一个功能上线后,其实研发心里根本没底儿,不知道这个功能上线以后是不是真的没问题;有经验一些老同学还知道直接登录线上机器去tail -f php.error.log,但是对于新同学来说,基本就只能等着被通知服务故障。 退一步说,即便是能去线上去tail -f查看错误日志,但是线上是多集群部署的,服务器都特别多,研发...

Python实战---制作专属有声小说(调用百度语音合成接口)

这一次的目标是使用百度云的人工智能接口,实现文字转语音的实时转换,将小说文字转换成语音朗读出来。 百度云接口调用 百度的这个接口对于我们普通用户非常友好,他的很多功能都是免费的,而且我们每天可以免费调用这个接口五千次,非常适合我们玩转这些功能。 注册百度云账号 首先打开百度云语音合成模块接口地址 打开网址后点击《立即使用》选项,然后会出现登录的选项界面。如...

以前整理的网络上免费API接口

以前整理的一些免费的API接口,具体是否好用还需要时间测试,但是先分享给大家。 天气接口 聚合数据: http://op.juhe.cn/onebox/weather/query 用例 官方文档 来源:weather.com 百度接口: http://api.map.baidu.com/telematics/v3/weather?location=嘉兴...

界面编程模仿篇(QQ登录界面逼真篇)

写了好多天的爬虫,偷空前前后后用了两天的时间(排除吃饭睡觉)写完了这个QQ登录界面,看起来还凑和着吧,如果是的大神的,莫见笑,纯属业余作品,废话先不多说,截图如下,其中第二幅图片中的红色方框部份有待完善,明天开始继续搞爬虫,等有时间时再完善,先凑和着吧: 本篇博文就分析一下这个界面设计中的几个关键点,在阅读本博文之前请先阅读我个人博客上关于模仿QQ界...