CE3先放一放,重新回归XNA4.0 WP7游戏,从今天开始每天一贴
lydc吧
全部回复
仅看楼主
level 6
记录我的学习历程。
第一天。
已经一个多星期没碰XNA了,略微有点生疏,不过没关系,在实践中重新熟悉吧。
按照官方教程建立了一个项目,并且导入了一些教程素材。
目前在阅读教程自带的类的代码。
1、源代码注释说明,手机游戏由一屏一屏组成。每一个新的屏创建后,根据新的屏是否仅是弹出屏来决定是否将之前的关掉。
2、并且一个屏幕关闭的状态有两种,一种是因上面的原因暂时关闭,另一种是永远地关闭,为了区分这两种关闭方式需要定义变量来确定。
3、无论如何,不管是出于隐藏状态还是激活状态或处于两者之间,update都会不停地调用。
4、输入处理函数仅在窗口未隐藏且激活状态的情况下能够被调用。
2012年03月29日 14点03分 1
level 6
第二天
NND,昨天晚上群主说wp7的SDK出了中文版的,于是果断卸掉了原版英文的。
但是尼玛中文版的装了以后缺少组件啊!不能用啊!
弄了一上午了都没弄好。
现在去全部删了重新装一遍。
如果晚上弄好了就再发一帖。
2012年03月30日 04点03分 3
level 6
第二天续
终于在中午重装后搞好了。
在官方提供的代码里,发现了一个叫ScreenManager的类,有点类似于以前写过的SpriteManager,在该类里实现了引用的材料的初始化和调用,并且拥有一些供所有Screen使用的属性。
在该类中会使用队列Update一遍所有Screen,并且检测是否激活态,如果是,则把当前的输入操作给它。(为什么要用队列表示不解,直接用一个foreach循环不就好了?)
Draw函数遍历所有Screen,对所有非HIDDEN的屏幕调用其本身的Draw函数。
在AddScreen函数内有一个判断是否初始化过该类的判断,为什么还要判断?难道还有对象未进行初始化的情况?
以前一直搞不懂在开始游戏之前那个loading界面是怎么搞出啦的,如何让程序一遍加载资源一边放个动画。现在终于知道原来这里面还用到了线程。
2012年03月30日 15点03分 4
level 6
第三天
果断把毛概翘了,一上午就准备在寝室搞这个了。
我又拉了一个同学来搞XNA,把资料和工具都传给他了,不知道他会坚持多久呢。
昨天和前天看了ScreenManger和GameScreen两个类,今天继续看官方源码。
在某个地方被卡主了,不知道一个变量到底是什么意思。
跟着代码示范写了点东西,但是感觉没什么提升。
看源代码的注释感觉像在练英语阅读一样。
感觉好艰难啊,手机编程和WINFORM一点都不一样。
又去微软官网下了几个教学视频。转眼就中午了啊,下午2节课,回来看视频。
晚上是去上选修呢,还是继续搞呢?
2012年03月31日 05点03分 5
level 6
第四天
今天一天的课,下午回来才开始看教程。
大致讲了几种容器控件的使用。
GRID是类似于表格的容易,有行和列。
CANVAS是绝对定位容器,并且有优先层次可以叠在一起。
STACKPANEL则可以用来设定子控件的排列方式,如横向、纵向。
BORDER这个关键词原本在HTML中是属性,到这里居然也成为控件,是定义边框用的。
POPup则是类似于弹框一样的控件。
SCROLLVIEW的内容可以进行拖动。
BUTTON的使用和HTML中差不多,不过背景图片是座位BUTTON子节点存在的,而不是单纯BUTTON的属性。
超链接按钮有个 targetname属性需要设置,不过如果是本地跳转的话不用设置。
repeat按钮可以实现长按不放不停触发的功能。
toggle按钮则可以实现状态保持。
2012年04月01日 11点04分 6
level 6
第五天
继续学习控件。
今天学的大多是以前用的很多的控件,大多数在winform和web里都常用的控件。
不过发现前端界面使用的语言XAML实在是太奇葩了,简直比HTML还不规范。
设置属性居然有三种不同的表示方法,实在是令人匪夷所思,而且貌似根本不遵从DOM模型,
或者不严格遵从。
thumb控件类似于笔记本电脑的操控板。
我现在在想如何实现拖拽一个照片的功能

2012年04月02日 03点04分 7
level 6
第六天
昨天晚上实现了控件的拖拽功能。
刚才又改了下事件函数,现在开始测试多控件共用同一事件函数的拖动行为。
搞了两个小时了,实现不了,总是出现 先拖动一个控件再拖动另一个的时候两个控件行为同步 的情况。
要想办法在一个控件拖动结束后保存移动参数,在下一次调用时间后还原参数。目前还没有想到好办法。
现在是下午3点,终于实现了控件间的独立行为,其实很简单,只要用Tag属性存储其变形参数,在下次调用再重新赋值给变形函数即可。
由于戴耳塞太久了,现在耳朵好痛啊。
休息一下,晚上再来
2012年04月03日 07点04分 8
level 6
第七天
今天一大早就去龙井山了,
一天下来累的不行,晚上才开始看教程。
又讲了一些与绘图有关的控件。
我看了一下,大概接下来的教程大部分都是控件,C#相关的比较少,XAML比较多。
实在是太累了,就不敲代码了。
2012年04月04日 14点04分 9
level 6
第八天
今天课有点小多。
晚上有点事情搞得效率不太高。
花了几个小时的时间,基本实现了一个很简单的发牌系统,基本实现了花色、数字组合不重复,牌数不超过上限,随机生成花色、颜色、牌名,牌名不超过上限,几个功能。
写了卡牌的类,不过还没有应用进去。
基本是靠C#基础写的,没怎么用到WP7的东西。
接下来准备把类放到发牌系统里去,然后再看看教学视频。

2012年04月05日 14点04分 10
level 6
第九天
上午没课,不过没写代码,逛了一上午ACFUN
中午花了不到一个小时的时间,改进了一下发牌系统
把原来的一个textblock显示所有的牌改为每一张牌一个textblock,,并且调整好牌的放置位置。
在生成完毕后把每张牌的属性实例化给类的对象,方便后面调用。
在所有52张牌发完后把发牌按钮设置为不可用。
最后发现在XAML内控件的MARGIN属性并不是和HTML里相同的。
HTML里MARGIN属性的参照对象是父节点或网页文档的边框。
而在XAML里MARGIN属性参照对象时父节点的中心。
这点差别搞得我半天调整不好textblock的位置,真是蛋疼。
下午3节课。

2012年04月06日 04点04分 11
level 6
第十天
昨晚睡得不踏实,今天很早就醒来了,搞得头有点昏昏的。
不过一上贴吧就发现帖子加精了啊,瞬间就清醒过来了。
现在开始做出牌、弃牌系统。
初步设想是在发牌后,点击牌的textblock之后跳转到另外一个页面,在新页面上显示该牌的信息,并设有出牌、弃牌、返回三个按钮对应三种功能。
要解决的问题是页面之间参数的传递,网上最常用的都是通过类似WEB页面传值的方式来传一些字符串的值。
但传字符串并不是最佳解决方案,我希望能传递一个对象过去。
看了两篇教程头痛欲裂,所以睡了一小会儿。
在App.xaml.cs文件里可以定义全局变量。于是这个问题就愉快地解决了。
关于 说明 这一部分是一个很头疼的事。16种牌有16种说明,如果用SWITCH语句来写的话会不会太蠢了...要想办法把说明集成到类里面去,用的时候再调出来这样就方便多了。

2012年04月07日 08点04分 12
level 6
第十天
今天又看了逃学威龙哈,感觉朱茵当年好漂亮啊,可惜当初看的时候还小,没发现啊。
把每张牌的说明内容写到类里去了。
接下来要实现按钮的功能了。
初步设想是弃牌的话就把这样拍删掉,出牌则将牌移到下方,并且设置一个变量来记录打出的牌,以便对接下来出的牌进行逻辑判断。
考虑到XAML页面之间调用函数的不可能性。现在把原本在主页中的关键变量、对象全部转移到App.xmal.cs中,并设置为全局变量。
这样一来就可以再应用程序的任何页面中对它们进行修改。
不过这样一来的话,很多原本的设定都要稍微修改下。唔,头疼啊。
发牌后
点击牌后
点击出牌后
再次点击出了的那张牌,出牌和弃牌按钮没有了。

2012年04月08日 12点04分 13
level 6
上一帖应该是第十一天。
第十二天。
今天阴天啊,心情很乱的感觉。
今天玩得多了一点。现在才开始写代码。
弃牌的设想是直接将textblock设置为不可见即可。
至此牌的三个基本功能全部实现。
现在开始实现逻辑方面的判断,这里面很头疼啊,每种情况里面都有例外发生。
首先要实现的是计时器功能,即出牌后开始倒计时,若倒计时时间内没有出第二张牌则当前牌生效。
在此之前在出牌按钮里增加逻辑判断。
实现了一部分牌的逻辑判断。
但是那些需要判断距离限制的牌无法进行判断了。
那发牌系统就做到这里,也算基本熟悉了XAML架构和WP7的应用软件基本模式了。
接下来就要转回到XNA里去,还是从底层开始吧,毕竟还在学习阶段,引擎什么的暂时放一边好了。
这次打算不跟示例来了,自己写,想到哪写到哪。
目前写了一个基础类,导入了一些图片,就这么着吧。
2012年04月09日 14点04分 14
level 1
是婓迪。?
2012年04月10日 09点04分 15
level 6

2012年04月10日 14点04分 16
level 6
第十三天。
今天10节课啊,晚上上机破天荒没逃,回来7点半,写了申请玩了下游戏居然就10点多快11点了。
本来还想熄灯后写点东西,不过现在很困啊,也不知道还能撑多久,不过尽量吧。
现在初步设想是做一个回合制的游戏。
也就是左边一个是玩家控制,右边一个由电脑控制,行动按钮还没写,会添加在角色精灵下方。
玩家有普通攻击、防守和几种特殊技能(可能是四种或五种)。
然后采用无时限回合制对战,由玩家先手。
该轮敌人被消灭后,玩家的技能会升级,血量回满,然后面对下一个敌人。
一个十个敌人。
敌人的图像都已经导入了,攻击特效和受伤特效、miss特效现在还不会,慢慢来。

2012年04月10日 14点04分 17
level 6
第十四天。
发现一个很不错的博客,里面对WP7上的XNA变成讲的很详细。
果然在按钮出发功能的实现上和我想的一样。
先检测出输入的形式和位置,然后判断是否在按钮所在矩形区域内存在Press动作,
如果存在则调用按钮绑定的方法。
之前说过WP7上的游戏是一屏一屏组成的,这个博客里讲的很清楚。每一屏相当于一个关卡。
不过我这个游戏由于用不到那么多关卡,所以不需要那么多SCREEN。

2012年04月11日 15点04分 18
level 6
第十五天
昨天晚上已经完成了按钮按下的动画效果。
现在来实现按钮按下事件的实现。
现在是晚上11点46分,我的代码已经惨不忍睹了。
乱七八糟的规划,复杂的逻辑,各种奇葩的函数调用。
终于知道软件和程序有什么不同了,软件的架构的确太复杂了。
真不知道windows操作系统是怎么写出来的。。
不过总算实现了攻击特效,扣血行为一个public函数就能搞定了,明天早上起来弄吧,快12点了,电脑也要没电了。
2012年04月12日 15点04分 19
level 6
第十六天
刚才输了一把DOTA,很不爽啊。
已经把攻击事件写完了,敌人溃败、加载下一个敌人的事件也粗略地实现了。
现在开始写回合事件。即每回合每方只能攻击一次,有必要的话要有回合时间限制。
话说有点饿了啊,下午吃饭吃的有点早,不过现在楼下的门已经关了,没法去吃夜宵了。
关于回合制的初步设定是设置一个BOOL变量,如果变量值为true则让update可以接收input
,否则不能。
另外再设置一个简单的AI函数,用它来实现电脑角色的攻击事件。

2012年04月13日 16点04分 20
level 6
第十七天
电脑角色的攻击行为,暂时设定是血量在50%以上只会发动普通攻击,在50%以下会有概率发动特殊攻击。
不过电脑角色的攻击实现不能只在一个Update周期内能够实现的,因为,一个Update周期只有1/30秒,如果这样玩家将看不到电脑的行动。
所以想法是,把电脑行动结束的标志更改放到行动动画Update中去。
又要导入新的特效了,真是烦啊。
现在最基本的框架基本算是写好了,包括玩家与电脑角色的互动,玩家的胜利和失败。

2012年04月14日 10点04分 21
1 2 尾页