设为首页收藏本站喵玉殿官方微博

 找回密码
 少女注册中
搜索
楼主: Sonicthedgehog

[编程算法] 【史前】TouhouDungeonAdventrue 从开始制作到做完的记录

 火.. [复制链接]
 楼主| 发表于 2015-9-3 01:36:02 | 显示全部楼层
2015-9-3 01:34:30

啊,已经好久没更过了。

刚刚解决了最最棘手的问题,拖动画面时的FPS从原来的10帧左右骤升至60。
画面也变的十分流畅了。

先这么一说,明天会更,今天是放个预告。

以上。
回复

使用道具 举报

 楼主| 发表于 2015-8-27 23:58:31 | 显示全部楼层
2015-8-27 23:41:58

本来以为今天能写完连带基本绘制的图块选取,谁知道倒腾个布局耗了俩小时……

我也没啥可说的啦,成果图如下。


看着挺省劲就做出来了是吧……中间真是几经波折啊……
刚开始是按照用Animation操作Image控件的位置来达到滚动的效果,后来发现净是遮挡问题。
然后又来回来去地调XAML中各个Grid在代码中的位置,不过到后来还是会有问题,就像这样。
真是蛋痛啊……或许你说再用个Grid遮住上边标题栏不就可以了吗?
恩恩,聪明。但是窗体就没法拖动了,标题也显示不了了,GG。

最后还是用了cRenderEngine解决。因为每次重绘都挺费CPU的,所以没法做上平滑的滚动效果了……


没完,然后还有这四个负责滚动的Grid的显示与否的判断,来回折腾半天。

结果最后就做成这样了……

并没有更很多嘛!


嘛算了,明天去考科目二了。但愿这次能过了吧。
下午回来有的是时间继续更。

以上。



回复

使用道具 举报

 楼主| 发表于 2015-8-26 00:41:21 | 显示全部楼层
2015-8-26 00:21:27

又是一大更。

啊啊这次更总共拖了3天,中间又写过什么东西都记得不是很清楚了……

更新总结:
1.地图和鼠标标记分层绘制,提升效率。
2.图块选择那里可以显示图了
3.图块选择那里配色改变
4.图块选择(怎么又是你)那里增加了移动图片的箭头。
5.解决了窗体焦点的问题

详细说明:
1.其实就是弄了两个Image控件叠着放,不过在两个上边画的话,地图的那个Image控件的更新频率就不用太频繁了。鼠标移动不拖拽地图的时候不用重绘,只画鼠标就OK啦。
←我真TM机智
2.新的_cREsub As cRenderEngine解决了这个问题,这个Engine关联的Image控件是右边那块。
3.标题栏是蓝色的,图块选择确实黑色的。虽然不知道你们怎么看,不过我还是给换了,如果你们觉得有更好的配色方案可以告诉我啊~下面会有图展示效果的。
4.嗯,因为图块选择可以显示图了,所以就发现了这个问题。实际制作素材的时候没有按照统一的规格(长?x32和宽8x32)去做,所以就成这样了。

所以要加上滚动条。但是默认的ScrollBar好像调了显示也没用啊。没办法,自己做吧!

5.为了测试,把打开地图按钮的部分给做了(中间省去描述坑爹WPF的OpenFileDialog破问题的文字若干)。然后发现……
每一次按空格加鼠标拖拽地图窗体焦点都会回到按钮上,然后就又打开地图了……
简直神烦!用别的Grid.Focus没什么卵用,禁用按钮对按键的反应也不会,于是用了折中的方法。
-MetroWindow里边所有的事件变成Preview的。
-加了个小按钮用来吸引焦点。(这时候才发现Grid.Focusable是=False的)

←我真TM机智

最后,展示成果的时间到啦~
这个颜色稍微有点问题,你们不要在意啦~


嗯。就是这些了。

以上。

点评

tnl
不是mathapp…  发表于 2015-8-27 00:07
那个TabControl的背景色啊,是用Grid垫在了底下。这个效果是向OneNote学习的。  发表于 2015-8-26 18:42
Good,为何我感觉你的MathApps和我的不一样?  发表于 2015-8-26 11:47
赞~  发表于 2015-8-26 07:58
回复

使用道具 举报

 楼主| 发表于 2015-8-22 02:49:42 | 显示全部楼层
2015-8-22 02:30:33

今日一大更!
图像引擎部分算是完工啦!

读取什么的啊,画在什么什么空间上啊,画什么啊,图片存在哪里啊,统统解决!

总之,成品效果图:
QQ截图20150822022303.png
尝试加载了一张地图,能绘制,能拖拽,简直效果超棒!(就是拖动的时候绘制略慢)
顺便上边那个小圆圈是鼠标位置的提示~

恩恩,看起来当然很简单咯~其实并不简单啊……
说一下细节上的修改吧。
首先是cTex(图像)类,相对于昨天,修改过的方法/函数已经用绿色箭头标注出来了,而且不用的方法已经划掉了(红色)。修改也是很累的啊,完全不同的绘制方法。之前因为臭毛病没做注释还看了一会这四个DrawGraph有什么不同才理解……然后才改成现在的代码。
QQ截图20150822022415.png
cTex类里边也加了两个比较方便的属性。
QQ截图20150822022553.png
cRE是用来确定缓冲和绘制表面什么的,下边那个就是为了测试效果用的啦。

嗯。说到cRenderEngine,也有了一些更新。
QQ截图20150822022444.png
New就不说了,Begin和End是对缓冲区的操作和写入到控件那里去。

为了实现能拖拽地图,主窗体里边也加入了不少事件。
QQ截图20150822022519.png

最后实现了今天的目标啊哈哈哈哈哈!我竟然更完了今天的进度啊哈哈哈哈!

↑这就是过节被虐的表情↑


哦哦哦,还是得再说一次,右边那个边栏是可以打开的啦~打开之后真的不会冲掉下边盖着的图,不需要我来重绘。之前灰色背景右边没图片所以看不出来所以再说一遍~

明天就去THO啦(应该是今天)!买买买~

以上!

评分

参与人数 1萌度 +40 收起 理由
drzzm32 + 40 ……诶诶诶诶诶……Σ(゜Δ゜*)

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2015-8-21 00:24:51 | 显示全部楼层
2015-8-21 00:16:47

来到了上海!

吃得好饱!

电脑摔了个角!

门里被塞了奇怪的东西!

等等奇闻异事。不过风吹雨打还是要更TDA。
今天也算是把上次攻破的难点(图像分割)应用到了原来的引擎里,替换掉了一部分代码,新的东西也加进去了。
这个过程能算是复刻吗?总之是费了一番功夫。
测试效果图:
texsplit.png
分割效果正常,超高兴。

明天要去未来4年的大学踩踩点儿,下午应该是去世博园,晚上逛逛外滩?总之我还是想留出点时间更TDA。
下一步要做到读取地图并显示了,要做到这个可能要费点功夫啊,不知道明天能不能更。

BTW:22号求组队求面基!

以上。
回复

使用道具 举报

 楼主| 发表于 2015-8-19 00:55:38 | 显示全部楼层
2015-8-19 00:50:10

今日在外用公用WIFI结果密码被盗……

就是因为上边这个事儿,我本来挺高兴的,引擎初步写了一点,结果233333我直接气得半死……
今天太晚了不发图了,催睡觉,明天开始微博和喵玉殿同步更新吧。

放心吧,我各种密码都已经改过一遍了,能绑定手机的都绑定了。
两个扣Q,一个幺63,一个微伯, 一个黑东,都改了。
我真是服……不服不行……服得不行……
早知就应谨记老师教诲,随便一个U盘系统的BT6就能破WIFI密码……
何况那是2年前啊啊啊啊啊……

各位也吃我个教训吧……

以上。
回复

使用道具 举报

发表于 2015-8-17 22:29:19 | 显示全部楼层
Sonicthedgehog 发表于 2015-8-17 17:46
2015-8-17 17:29:17
  1. Imports System.Windows.Threading
  2. Imports System.Security.Permissions

  3. Public Class DispatcherHelper
  4.     <SecurityPermissionAttribute(SecurityAction.Demand, Flags:=SecurityPermissionFlag.UnmanagedCode)>
  5.     Public Shared Sub DoEvents()
  6.         Dim frame As New DispatcherFrame()
  7.         Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, New DispatcherOperationCallback(AddressOf ExitFrames), frame)
  8.         Try
  9.             Dispatcher.PushFrame(frame)
  10.         Catch generatedExceptionName As InvalidOperationException
  11.         End Try
  12.     End Sub
  13.     Private Shared Function ExitFrames(frame As Object) As Object
  14.         DirectCast(frame, DispatcherFrame).Continue = False
  15.         Return Nothing
  16.     End Function
  17. End Class
复制代码
代码在此~

点评

哦!感谢,回头我去试试!  发表于 2015-8-19 00:55
回复

使用道具 举报

 楼主| 发表于 2015-8-17 17:46:26 | 显示全部楼层
2015-8-17 17:29:17


原谅我这两天感冒啦,目前还没有好,不过也没至于到不能肝代码的程度。
就在今天下午把测试绘制部分的代码写好了,引擎也可以重制啦。
引擎只调用.NET的代码,可以绘制在不同的控件里。

重制引擎的方法也很简单,方法和函数的名字不变,只需要把内容换成不用DX也能达到相同目的的代码就可以了,另外再加一点新的方法和属性什么的,以增加绘制到不同控件的功能。


测试代码: QQ截图20150817171616.png
哦哦,刚才还在后边加入了内存释放,测试也没问题。
(虽然是dim,资源会自动回收,不过将来写在类里就没人帮我回收啦)
DPI那里还不太会获取系统的DPI值,求直接给段现成的代码QAQ(←不过目前不影响绘制)


测试效果:
QQ截图20150817172459.png
另外,右边的边栏打开和收回不会清掉主Image里边的图,非常好。
再另外就是遇到了线程的问题,将来拖拽地图的时候肯定得一边拖以便重回刷新控件,
然而.NET4.5没有Doevents()了,我超难受啊!!!
只能用Dispatcher了,但是又不会……

求帮忙!

再另外:我以后想每次发帖都在微博里边也发一份,
1来方便吸引人气,2来方便比我厉害的大佬装逼打我脸,这样我就能抱大腿啦


以上。

点评

tnl
微博玩脱了被封了…  发表于 2015-8-17 22:29
回复

使用道具 举报

发表于 2015-8-15 23:02:49 | 显示全部楼层
感觉我们项目结构不同啊

你是把每个类都单独一个文件的?

1.png

点评

这其实是从VB6.0时代走过来的时候带来的臭毛病,其实稍微整合下,到一个文件里就可以了,其他没有什么影响。  发表于 2015-8-17 17:28
tnl
结构没有相同的…  发表于 2015-8-15 23:10
回复

使用道具 举报

 楼主| 发表于 2015-8-15 00:12:16 | 显示全部楼层
2015-8-15 00:07:15

唔……算是把地图这块弄进来了。
但是原来的绘图引擎不能用,因为这次的绘制得分两部分了,一部分主界面,一部分在侧边图块选取那里。
引擎还得接着写,不过应该都是.NET现成的,会好些。
QQ截图20150815000553.png
然后里边用过的Rectangle结构和WPF里边的Rectangle结构不一样,需要每个都校正一遍意思。
其实今天干的事情很少……因为赶猪去了。
赶猪去了……猪去了……去了……了……
QQ图片20150815001125.png
我真是干了猪了!

以上!(%#@&(*¥&!(%&*!#!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 少女注册中

本版积分规则

合作与事务联系|无图版|手机版|小黑屋|喵玉殿

GMT+8, 2025-10-31 06:39

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表