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

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

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

 火.. [复制链接]
 楼主| 发表于 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 来自手机 | 显示全部楼层
提示: 该帖被管理员或版主屏蔽
回复

使用道具 举报

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

使用道具 举报

发表于 2015-4-20 16:51:22 | 显示全部楼层
你的引擎是纯2D的么?
如果不是的话,启用深度测试可以很方便的处理”绘图顺序“哟,完全不用管什么图层顺序拉

点评

英文是Z-Buffer你可以搜搜看,当然非3d引擎也可以自己实现。。  发表于 2015-4-22 23:35
惊!求问这种东西怎么打开?或者英文名字告诉我也好。。  发表于 2015-4-22 01:04
好吧,大概是没有必要的  发表于 2015-4-20 17:03
回复

使用道具 举报

 楼主| 发表于 2015-4-20 01:46:22 | 显示全部楼层
本帖最后由 Sonicthedgehog 于 2015-4-20 01:47 编辑

2015年4月20日01:42:08

今天大概写完了现有的体术部分。

于是开始写敌人相关的东西了。
yslash1.png

ym砍了一下毛玉的截图(毛玉的贴图没找好,太大了……)

恩恩。敌人类估计得写不少时间。

然后是这个:

application.png

已经向人物行走图的作者发了使用申请,不知道什么时候能得到回复呢……
也不知道日语用的对不对……

嘛,咦咔~


以上。
回复

使用道具 举报

 楼主| 发表于 2015-4-19 01:27:50 | 显示全部楼层
2015-4-19 01:24:34

恩恩。累!

嘛嘛~今天算是把体术啥判定啥的给写了。
就是绘制顺序是个问题,一会得想办法解决一下。


这个就是非弹幕的体术大概的样子啦~看着还是挺帅的~

快点开始写敌人部分吧……真是等不及啦!




以上。
回复

使用道具 举报

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

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2015-4-12 18:13:23 | 显示全部楼层
2015-4-12 18:09:53

于是还是没有筹集到什么好的方法……恩,不管了,总之先用Collection来存储弹幕吧!优化什么的到时候再说!

在今天肝了2h左右的情况下,弹幕系统算是初步完成辣!


贴张图来庆祝!



乃们赶脚肿么样啊~下一步的任务就是稍稍修正一下弹幕系统然后开始写敌人类了吧……

恩,这个弹幕系统……渍渍,总觉得不够好呢……


以上!
回复

使用道具 举报

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

于是今天算是正式开始肝弹幕部分相关的代码啦。


写了每个弹幕的移动,判定,消除。
移动方式两种,直角坐标下运算和极坐标下运算。
对墙判定和对实体判定已经写好了~
自己的到指定时间消除和碰墙消除也已经写好了~

现在有个比较大的问题,就是怎么存储这些弹幕啊……
数组吗?考虑到消弹顺序不统一可能造成数组不整齐或者不知道新的一个弹幕插在数组哪里的情况。
链表吗?恩恩,不管是添加弹幕还是删除弹幕都是非常方便的,可惜窝用的是VB啊……没有链表的啊……
Collection吗?我目前考虑的是这个……VB特有的……但是不知道效率怎么样……

所以如果各位有什么好办法的话请务必告诉我啊!

点评

用数组撸一个假链表?  发表于 2015-11-25 09:58
对对,没有指针……  发表于 2015-4-12 23:58
对哦,VB没有指针  发表于 2015-4-12 21:51
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-17 06:29

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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