2015-5-3 15:16:26
我的天!我自己从来没有想过我竟然能把碰撞这里写的如此流畅!
大概是在思考了很久之后开始动键盘写的,一口气写完了一看,瞬间爆炸!这效果简直流畅!
可惜算法乱得一锅粥……
那么图片来了!
http://img4q.duitang.com/uploads/item/201505/03/20150503151536_AiadP.gif
http://img5q.duitang.com/uploads/item/201505/03/20150503151952_SEcZL.gif
简直赞有木有!?
但是目前不排除会有一些小bug,比如会穿墙什么的。后期会修正。
以上
2015-5-1 23:54:09
哎……临近高考……真是更得越来越慢了……
最近的成果:
拿水果混了一首小人族,听着感觉渣爆了……不敢放出来……
剧本啥的,文案貌似在上次被否了设定之后一直闷闷不乐不打算接活的样子……
然后就是代码部分——没更!
我竟然没更!
好吧好吧,说到底还是那个关于对实体的碰撞问题。打算放出来大家一块讨论一下。
假设所有的实体(包括玩家和怪)的碰撞体积都是一个正方形。存储位置数据用的结构是:
center as Point(有x和y)
rect as Rectangle(有left、top、width、height,调用的时候可以直接调用right和bottom,整个矩形以center为中心)
我需要做到的是这样滴:
玩家直向移动碰到怪时会走不过去
玩家斜向移动碰到怪时先碰怪的方向移动无效,另一个垂直的方向照旧移动
玩家斜向移动正好碰到怪区域斜角的时候按照上一条处理
玩家不能穿过判定区域很小的怪
图示:
于是我怎么写碰撞相关的东西呢?有点思路的尽管往上放吧~
以上。
我倒是喜欢用C++....
感觉用起来很舒服.......
2015-4-26 12:53:35
What?这是什么?
这个是新的系统吗?(兴奋)
嘛,总之昨晚是写到了很晚,然后思考能力全无了就没有来更。
于是今天在昨天的基础上又多写了好多。
cAnim类更新了一下,可以传递颜色参数了。
cArea类写到70%了,矩形的判定已经没啥问题了。
cPlayer,cEntity类小更新。
cEnemy类大更新,大概是更了被攻击后反应的那一票东西。
新加入了cTextPop类,处理弹出文字。(掉血显示什么的)
贴图时间:
http://cdnq.duitang.com/uploads/item/201504/26/201504262718_85Uci.gif
这个gif就1.多M,不大。
http://img4q.duitang.com/uploads/item/201504/26/201504265237_zAfRj.gif
这个gif比较大,8.多M,要加载一会吧估计。
于是你们也看出来啦……我对角色和敌人的碰撞做的并不是很好,走位经常有卡壳的时候,很难受的……
于是今天就先更新这些吧~
以上。
2015-4-25 01:19:50
行吧,多次尝试后无果。
结果这个礼拜就坑在这上边了。大概15h左右吧。
果然transformedcolored这种格式的vertex就不能让z值是除0以为的值。
你妹啊……绘制顺序什么的……西奈!西奈西奈西奈!
妈蛋,引擎不搞了,还能被这个小小的绊脚石阻挡了去路?
明天开始继续推进cEnemy类。
以上。
dalao加油
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时画不出来。
{:24:}
真是日了狗了……
再附,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也是画不出来的。
{:21:}
我就不懂了,这Z轴跟我什么仇什么怨?
求大神!
以上!