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

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

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

 火.. [复制链接]
 楼主| 发表于 2015-5-3 15:21:50 | 显示全部楼层
2015-5-3 15:16:26

我的天!我自己从来没有想过我竟然能把碰撞这里写的如此流畅!
大概是在思考了很久之后开始动键盘写的,一口气写完了一看,瞬间爆炸!这效果简直流畅!

可惜算法乱得一锅粥……


那么图片来了!





简直赞有木有!?
但是目前不排除会有一些小bug,比如会穿墙什么的。后期会修正。


以上

点评

排序嘛。。。哎。据说那次听说dx自带这功能所以就搞引擎去了,结果无功而返还弄一肚子气。。。我在担心自己排会不会影响效率,不过这问题迟早得解决。  发表于 2015-5-4 10:50
喵玉的遮挡好有喜感啊...(为毛不根据y轴坐标设置下呢)  发表于 2015-5-4 00:19
回复

使用道具 举报

 楼主| 发表于 2015-5-2 00:17:45 | 显示全部楼层
2015-5-1 23:54:09

哎……临近高考……真是更得越来越慢了……


最近的成果:
拿水果混了一首小人族,听着感觉渣爆了……不敢放出来……
剧本啥的,文案貌似在上次被否了设定之后一直闷闷不乐不打算接活的样子……
然后就是代码部分——没更!

我竟然没更!
好吧好吧,说到底还是那个关于对实体的碰撞问题。打算放出来大家一块讨论一下。

假设所有的实体(包括玩家和怪)的碰撞体积都是一个正方形。存储位置数据用的结构是:
center as Point(有x和y)
rect as Rectangle(有left、top、width、height,调用的时候可以直接调用right和bottom,整个矩形以center为中心)

我需要做到的是这样滴:
玩家直向移动碰到怪时会走不过去
玩家斜向移动碰到怪时先碰怪的方向移动无效,另一个垂直的方向照旧移动
玩家斜向移动正好碰到怪区域斜角的时候按照上一条处理
玩家不能穿过判定区域很小的怪

图示:

未标题-1.png

于是我怎么写碰撞相关的东西呢?有点思路的尽管往上放吧~



以上。

点评

求问圆形的怎么写。。  发表于 2015-5-2 08:40
看上去貌似可以用 矩形碰撞+障碍方向判断 (+四叉树什么的) 解决。但为毛我会感觉圆形碰撞会更好点呢。  发表于 2015-5-2 01:09
回复

使用道具 举报

 楼主| 发表于 2015-4-29 01:36:09 来自手机 | 显示全部楼层
提示: 该帖被管理员或版主屏蔽
回复

使用道具 举报

发表于 2015-4-28 15:39:31 | 显示全部楼层
我倒是喜欢用C++....
感觉用起来很舒服.......

点评

打算假期抽时间学习下c++,毕竟是主流,而且会总比不会好~  发表于 2015-4-29 01:22
回复

使用道具 举报

 楼主| 发表于 2015-4-28 01:11:12 来自手机 | 显示全部楼层
提示: 该帖被管理员或版主屏蔽
回复

使用道具 举报

 楼主| 发表于 2015-4-26 13:00:13 | 显示全部楼层
2015-4-26 12:53:35

What?这是什么?
QQ截图20150426125430.png

这个是新的系统吗?(兴奋)


嘛,总之昨晚是写到了很晚,然后思考能力全无了就没有来更。
于是今天在昨天的基础上又多写了好多。
cAnim类更新了一下,可以传递颜色参数了。
cArea类写到70%了,矩形的判定已经没啥问题了。
cPlayer,cEntity类小更新。
cEnemy类大更新,大概是更了被攻击后反应的那一票东西。
新加入了cTextPop类,处理弹出文字。(掉血显示什么的)


贴图时间:



这个gif就1.多M,不大。



这个gif比较大,8.多M,要加载一会吧估计。


于是你们也看出来啦……我对角色和敌人的碰撞做的并不是很好,走位经常有卡壳的时候,很难受的……

于是今天就先更新这些吧~

以上。

点评

嘛,命名规则而已,个人作品又没有什么企业标准,看着舒服就可以啦~  发表于 2015-4-26 19:08
类前加c貌似是c++库的标准。。。(然而并不是→_→  发表于 2015-4-26 14:39
虽然不知道为什么,不过类前面加个c好像很厉害的样子。。  发表于 2015-4-26 14:12
回复

使用道具 举报

 楼主| 发表于 2015-4-25 01:22:33 | 显示全部楼层
2015-4-25 01:19:50

行吧,多次尝试后无果。
结果这个礼拜就坑在这上边了。大概15h左右吧。
果然transformedcolored这种格式的vertex就不能让z值是除0以为的值。

你妹啊……绘制顺序什么的……西奈!西奈西奈西奈!

妈蛋,引擎不搞了,还能被这个小小的绊脚石阻挡了去路?

明天开始继续推进cEnemy类。

以上。
回复

使用道具 举报

发表于 2015-4-24 00:41:30 | 显示全部楼层
dalao加油

点评

你住在哪?我住在欢乐谷这边  发表于 2015-4-24 13:46
大佬什么鬼啦!(不过话说回来住的真近。。)  发表于 2015-4-24 13:43
回复

使用道具 举报

 楼主| 发表于 2015-4-24 00:28:11 | 显示全部楼层
2015-4-24 00:12:31

我真是日了doge了!
没用!没用!
怎么改都不行!
'初始化DX9设备
    Public Sub InitDXBasic(ByRef frm As Form, w As Int16, h As Int16)
        Randomize()
        Dim presentParams As PresentParameters = New PresentParameters
        presentParams.Windowed = True  '窗口模式
        presentParams.SwapEffect = SwapEffect.Discard  '交换
        presentParams.BackBufferWidth = w
        presentParams.BackBufferHeight = h
        'presentParams.MultiSample = MultiSampleType.None '多重采样=0
        presentParams.EnableAutoDepthStencil = True
        presentParams.AutoDepthStencilFormat = DepthFormat.D16 '16位位深
        device = New Device(0, DeviceType.Hardware, frm, CreateFlags.SoftwareVertexProcessing, presentParams)
        device.VertexFormat = CustomVertex.TransformedColored.Format
        m_Sprite = New Sprite(device)
        '为了能响应键盘事件,该属性必须设为true         
        frm.KeyPreview = True

        '创建D字体对象,显示字符用,这两句不能放在场景中,否则会很慢
        Dim winFont As New System.Drawing.Font("Arial", 9, FontStyle.Regular)
        d3dfont = New Microsoft.DirectX.Direct3D.Font(device, winFont)
    End Sub


测试用的过程:
    Public Sub Test()
        Dim v(5) As CustomVertex.TransformedColored
        v(0) = CCV3(100, 100, 0.5, Color.Green)
        v(1) = CCV3(200, 300, 0.5, Color.White)
        v(2) = CCV3(0 + 400, 100 + 300, 0, Color.White)
        v(3) = CCV3(0 + 400, -100 + 300, 0, Color.White)
        v(4) = CCV3(100 + 400, 0 + 300, 0, Color.White)
        v(5) = CCV3(-100 + 400, 0 + 300, 0, Color.White)
        device.DrawUserPrimitives(PrimitiveType.LineList, 5, v)
    End Sub
    Private Function CCV3(x As Single, y As Single, z As Single, c As Color) As CustomVertex.TransformedColored
        CCV3.Position = New Vector4(x, y, z, 1.0F)
        CCV3.Color = c.ToArgb
    End Function
这个Test的结果是第一条线(z设成0.5的那条)画不出来,第二条线和第三条线正常画出来。

我怀疑是我devicebegin那部分有错,也贴出来。
    '准备设备绘制
    Public Sub BeginDevice()
        device.BeginScene()
        device.SetRenderState(RenderStates.ZEnable, True) '这边设置开启了深度检测
        device.SetRenderState(RenderStates.ZBufferWriteEnable, True) '这里和下边一行是按着教程来的
        device.SetRenderState(RenderStates.ZBufferFunction, 4) '教程说这里应该是2或者4,我这边2是黑屏,用的4
        device.SetRenderState(RenderStates.CullMode, Cull.None)
        device.SetRenderState(RenderStates.Lighting, True)
        device.SetRenderState(RenderStates.AlphaBlendEnable, True)
        device.SetRenderState(RenderStates.SourceBlend, Blend.SourceAlpha)
        device.SetRenderState(RenderStates.DestinationBlend, Blend.InvSourceAlpha)
        device.SetRenderState(RenderStates.AlphaTestEnable, False)
    End Sub
以上应该就已经能说明问题了吧……求问到底错在那里了?怎么这z不是0就画不出东西来?
顺便说一句:
CCV3.Position = New Vector4(x, y, z, 1.0F)这句里边那个1.0F是指rhw,这个值我试了0.0f和1.0f都是z=0时能画出来,z=1时画不出来。

真是日了狗了……






再附,sprite的绘图过程我这么写的:
m_Sprite.Begin(SpriteFlags.AlphaBlend + SpriteFlags.SortDepthFrontToBack)
Public Sub DrawGraphR(x As Integer, y As Integer)
            '分格图像绘制
            Dim trans As Vector2 = New Vector2(x, y)   这个应该是指平移
            Dim mat As Matrix
            mat = Matrix.Transformation2D(Pcenter, 0, scale, Pcenter, rotation, trans)   矩阵的变换吧,我不懂,你们看吧
            m_Sprite.Transform = mat   把变换好的矩阵放到sprite里
            m_Sprite.Draw(m_Tex, New Rectangle(ix * cellW, iy * cellH, cellW, cellH), Nothing, Nothing, drColor)   在指定的rect里边画,那俩nothing是Center和Position,Center就是{0,0,0},Position我试过{0,0,z},z不是0也是画不出来的。



我就不懂了,这Z轴跟我什么仇什么怨?
求大神!

以上!


回复

使用道具 举报

 楼主| 发表于 2015-4-23 01:55:50 来自手机 | 显示全部楼层
提示: 该帖被管理员或版主屏蔽
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-31 11:41

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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