/
index.html
832 lines (442 loc) · 25 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
<!DOCTYPE html>
<!--[if IEMobile 7 ]><html class="no-js iem7"><![endif]-->
<!--[if lt IE 9]><html class="no-js lte-ie8"><![endif]-->
<!--[if (gt IE 8)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js" lang="en"><!--<![endif]-->
<head>
<meta charset="utf-8">
<title>番茄手册</title>
<meta name="author" content="newtomato">
<meta name="description" content="背景说明 前段时间为服务器端压力和代码质量测试做了一个小小的贡献。
这个工具不复杂,却能解决大问题。我借此想要抛砖引玉,希望大家在开发中不要将思路仅仅局限在某个方面,应该拓展视野,发现更多。 一般情况下,服务器上线前,会自己做这方面的测试。而我们的情况还真是特殊。服务器自己用机器人上去跑, …">
<!-- http://t.co/dKP3o1e -->
<meta name="HandheldFriendly" content="True">
<meta name="MobileOptimized" content="320">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="canonical" href="http://www.newtomato.me/">
<link href="/favicon.png" rel="icon">
<link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
<script src="/javascripts/modernizr-2.0.js"></script>
<script src="/javascripts/ender.js"></script>
<script src="/javascripts/octopress.js" type="text/javascript"></script>
<link href="/atom.xml" rel="alternate" title="番茄手册" type="application/atom+xml">
<link href='http://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic' rel='stylesheet' type='text/css'>
<!--Fonts from Google"s Web font directory at http://google.com/webfonts -->
<link href="http://fonts.googleapis.com/css?family=PT+Serif:regular,italic,bold,bolditalic" rel="stylesheet" type="text/css">
<link href="http://fonts.googleapis.com/css?family=PT+Sans:regular,italic,bold,bolditalic" rel="stylesheet" type="text/css">
</head>
<body >
<header role="banner"><hgroup>
<div id="logo">
<div id="logoLeft">{</div>
<div id="logoText">think</div>
<div id="logoRight">}</div>
<div class="clear"></div>
</div>
<h1><a href="/">番茄手册</a></h1>
<div class="clear"></div>
</hgroup>
</header>
<nav role="navigation"><ul class="subscription" data-subscription="rss">
<li><a href="/atom.xml" rel="subscribe-rss" title="subscribe via RSS">RSS</a></li>
</ul>
<form action="https://www.google.com/search" method="get">
<fieldset role="search">
<input type="hidden" name="q" value="site:www.newtomato.me" />
<input class="search" type="text" name="q" results="0" placeholder="Search"/>
</fieldset>
</form>
<ul class="main-navigation">
<li><a href="/">Blog</a></li>
<li><a href="/blog/archives">Archives</a></li>
<li><a href="/about2">About</a></li>
</ul>
</nav>
<div id="main">
<div id="content">
<div class="blog-index">
<article>
<header>
<!-- Now we're back to normal posts. Note the links used under href in both headers.-->
<h1 class="entry-title"><a href="/blog/2019/01/05/010">500人同时在线的客户端小工具</a></h1>
<p class="meta">
<time datetime="2019-01-05T17:58:54+08:00" pubdate data-updated="true"></time>
</p>
</header>
<div class="entry-content"><h2 id="section">背景说明</h2>
<p>前段时间为服务器端压力和代码质量测试做了一个小小的贡献。<br />
这个工具不复杂,却能解决大问题。我借此想要抛砖引玉,希望大家在开发中不要将思路仅仅局限在某个方面,应该拓展视野,发现更多。</p>
<p>一般情况下,服务器上线前,会自己做这方面的测试。而我们的情况还真是特殊。服务器自己用机器人上去跑,没有爆出错误。而我们的用户自己登陆游戏,做些操作,就莫名的出现了问题。尤其是同时在线的人数并不多,有的时候不到100人就爆了。</p>
<p>于是我们怀疑服务器端的机器人逻辑和玩家自己的逻辑可能不一样。由于服务器那边很多代码,都是陈年老酒了。改也改不动。于是我们转换思路,就用大量客户端发起请求测试。</p>
<p>这里的“大量”是同时在线500人。虽不多,但也足以测试出问题。<br />
</div>
<footer>
<a rel="full-article" href="/blog/2019/01/05/010">阅读全文→</a>
</footer>
</article>
<article>
<header>
<!-- Now we're back to normal posts. Note the links used under href in both headers.-->
<h1 class="entry-title"><a href="/blog/2018/07/08/lua-problems">Lua中事件派发而引发的问题</a></h1>
<p class="meta">
<time datetime="2018-07-08T20:46:00+08:00" pubdate data-updated="true"></time>
</p>
</header>
<div class="entry-content"><h2 id="table-key">table key的排序问题</h2>
<p>在lua中,table的key如果不是数字,用pairs打印出来的顺序和编码的顺序不是一个顺序。那是因为key是按照他的hash值进行排序。如果是数字,这样的问题就不存在。<br />
但是真的是这样么?<br />
实际上,如果是有序的数字,1,2,3…这样的确实没有问题。但是如果无序,那么仍然有概率会出现上面的问题。而这个问题近期就发生在我们的项目中。</p>
<p>我们采用了事件。但是我们希望事件能够按照我们要求的顺序来有序派发。<br />
一个事件对应N个回调函数。打印出来的结构如下:</p>
</div>
<footer>
<a rel="full-article" href="/blog/2018/07/08/lua-problems">阅读全文→</a>
</footer>
</article>
<article>
<header>
<!-- Now we're back to normal posts. Note the links used under href in both headers.-->
<h1 class="entry-title"><a href="/blog/2018/07/01/unity-game-ball">用Unity实现物理碰撞游戏</a></h1>
<p class="meta">
<time datetime="2018-07-01T19:23:28+08:00" pubdate data-updated="true"></time>
</p>
</header>
<div class="entry-content"><p>前几日,看到一款《物理碰撞的游戏》,很是有意思。玩家只要将一个球弹出去,球在碰到一些方块之后会弹回来,同时带着拖尾效果。<br />
看了之后,结合unity。我决定fast follow一下,看是否能很快做出来。</p>
<p>果不其然,周末用了半天左右的时间,总算搞出了样子。效果如下:<br />
<img src="http://jolie.oss-cn-hangzhou.aliyuncs.com/2018-07-01-circle.gif" alt="circle" /></p>
</div>
<footer>
<a rel="full-article" href="/blog/2018/07/01/unity-game-ball">阅读全文→</a>
</footer>
</article>
<article>
<header>
<!-- Now we're back to normal posts. Note the links used under href in both headers.-->
<h1 class="entry-title"><a href="/blog/2018/06/13/xlua-1">Xlua笔记-协程</a></h1>
<p class="meta">
<time datetime="2018-06-13T19:00:07+08:00" pubdate data-updated="true"></time>
</p>
</header>
<div class="entry-content"><p>xlua的源码在github上有,我今天主要想把他关于协程的函数梳理一下。借此巩固自己的知识,增强记忆。<br />
先上源码:</p>
<div class="bogus-wrapper"><notextile><figure class="code"><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
<span class="line-number">8</span>
<span class="line-number">9</span>
<span class="line-number">10</span>
<span class="line-number">11</span>
<span class="line-number">12</span>
<span class="line-number">13</span>
<span class="line-number">14</span>
<span class="line-number">15</span>
<span class="line-number">16</span>
<span class="line-number">17</span>
<span class="line-number">18</span>
<span class="line-number">19</span>
<span class="line-number">20</span>
<span class="line-number">21</span>
<span class="line-number">22</span>
<span class="line-number">23</span>
<span class="line-number">24</span>
<span class="line-number">25</span>
<span class="line-number">26</span>
<span class="line-number">27</span>
<span class="line-number">28</span>
<span class="line-number">29</span>
<span class="line-number">30</span>
</pre></td><td class="code"><pre><code class=""><span class="line">local function async_to_sync(async_func, callback_pos)
</span><span class="line"> return function(...)
</span><span class="line"> local _co = coroutine.running() or error ('this function must be run in coroutine')
</span><span class="line"> local rets
</span><span class="line"> local waiting = false
</span><span class="line"> local function cb_func(...)
</span><span class="line"> if waiting then
</span><span class="line"> assert(coroutine.resume(_co, ...))
</span><span class="line"> else
</span><span class="line"> rets = {...}
</span><span class="line"> end
</span><span class="line"> end
</span><span class="line"> local params = {...}
</span><span class="line"> table.insert(params, callback_pos or (#params + 1), cb_func)
</span><span class="line"> async_func(unpack(params))
</span><span class="line"> if rets == nil then
</span><span class="line"> waiting = true
</span><span class="line"> rets = {coroutine.yield()}
</span><span class="line"> end
</span><span class="line">
</span><span class="line"> return unpack(rets)
</span><span class="line"> end
</span><span class="line">end
</span><span class="line">
</span><span class="line">local function coroutine_call(func)
</span><span class="line"> return function(...)
</span><span class="line"> local co = coroutine.create(func)
</span><span class="line"> assert(coroutine.resume(co, ...))
</span><span class="line"> end
</span><span class="line">end
</span></code></pre></td></tr></table></div></figure></notextile></div>
<p>阅读xlua代码的时候,看到这段关于lua和c#协程合作实现一种异步转化同步的代码,太佩服作者巧妙的心思和对协程深刻的理解。</p>
</div>
<footer>
<a rel="full-article" href="/blog/2018/06/13/xlua-1">阅读全文→</a>
</footer>
</article>
<article>
<header>
<!-- Now we're back to normal posts. Note the links used under href in both headers.-->
<h1 class="entry-title"><a href="/blog/2018/06/12/luacov-test">在lua项目中使用luacov进行代码覆盖率的测试</a></h1>
<p class="meta">
<time datetime="2018-06-12T18:46:43+08:00" pubdate data-updated="true"></time>
</p>
</header>
<div class="entry-content"><p><a href="https://github.com/norman/luacov">luacov</a>是一个轻量级的代码覆盖率的检查工具。他总是和busted这个单元测试框架一起被人提到。</p>
<p>今天刚好我准备把他集成到项目中。先来个例子展示一下怎么使用。两个测试lua文件如下:</p>
</div>
<footer>
<a rel="full-article" href="/blog/2018/06/12/luacov-test">阅读全文→</a>
</footer>
</article>
<article>
<header>
<!-- Now we're back to normal posts. Note the links used under href in both headers.-->
<h1 class="entry-title"><a href="/blog/2018/05/26/godot-1">Godot引擎分析-1</a></h1>
<p class="meta">
<time datetime="2018-05-26T13:06:57+08:00" pubdate data-updated="true"></time>
</p>
</header>
<div class="entry-content"><p>利用业余时间看了一个星期的godot源码,云里雾里的看不清全貌。记录一下这周的成果,为以后先打个基础。</p>
<p>此处声明,由于个人并没全部看明白,所以我只是分享一部分我看到的东西。我的分享未必都是全部正确的。如果有错误也非常欢迎指正出来。正所谓互相交流才能有所进步。</p>
<p>ok,闲话少说进入正题。<br />
</div>
<footer>
<a rel="full-article" href="/blog/2018/05/26/godot-1">阅读全文→</a>
</footer>
</article>
<article>
<header>
<!-- Now we're back to normal posts. Note the links used under href in both headers.-->
<h1 class="entry-title"><a href="/blog/2018/05/20/godot-event-1">Godot基础知识之事件穿透</a></h1>
<p class="meta">
<time datetime="2018-05-20T20:03:02+08:00" pubdate data-updated="true"></time>
</p>
</header>
<div class="entry-content"><h2 id="section">什么是事件穿透</h2>
<p>场景上有一个物体A,B,B被A挡住,也就是我们能看到B的一部分。此时我们点击A(只有A的部分,没有挡住B的那部分),A会收到点击事件的通知。但是此时如果我们点击A,B交汇处,会发生什么?这就需要我们具体想让什么先发生。<br />
A,B均可以收到点击事件。收到事件会有一个先后顺序。一般会以显示顺序排序,前面的A会先收到。A收到之后,决定事件是否继续向下传递。如果传递了,就发生穿透。</p>
<p>大部分情况下,我们看到UI下面遮挡场景。点击UI,只希望UI收到点击事件。而UI下面遮挡的场景并不希望收到事件。事件由引擎触发,而由我们来决定是否终止。</p>
<p><code>EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId)</code>(用在u3d中)函数检测是否是在UI层,在cocos中,我们使用<code>onTouchBegan()</code>的返回值来判定是否被他吞掉。而在godot中是怎么实现的呢?</p>
</div>
<footer>
<a rel="full-article" href="/blog/2018/05/20/godot-event-1">阅读全文→</a>
</footer>
</article>
<article>
<header>
<!-- Now we're back to normal posts. Note the links used under href in both headers.-->
<h1 class="entry-title"><a href="/blog/2018/05/19/godot-transform-1">Godot基础知识之Transform坐标转换</a></h1>
<p class="meta">
<time datetime="2018-05-19T21:45:56+08:00" pubdate data-updated="true"></time>
</p>
</header>
<div class="entry-content"><h2 id="section">为什么要介绍坐标矩阵 ?</h2>
<p>Godot是一个开源的游戏引擎,支持2D和3D,如果你好奇Unity里面的那些炫酷特效是怎么实现的,又苦于没有unity3d的源码,那么可以考虑阅读Godot源码来帮助你梳理3D的知识库。</p>
<p>从渲染的角度上看,3D和2D在差别不大,都是需要将Texture和顶点(Mesh)数据,位置信息,颜色,法线等数据提交到GPU那边。渲染采用语言有所不同,有的采用opengl也有用d3d。<br />
现在渲染管线支持可编程,可以通过编写顶点片段着色器去修改图像最终的显示效果。</p>
<p>但是从计算的角度而言,3D还比2D多一个轴,因为这个轴,涉及了很多坐标变化,矩阵转换可以说是3D开发过程中当之无愧的基础。点击事件最终会通过坐标转换,来决定是否点中某个带碰撞盒的物体,物理引擎模拟运动,也离不开矩阵转化。最普遍的碰撞事件,大量物体在场景中运动(暂且不考虑性能问题),最终检测两个物体是否碰撞,也是需要位置坐标等,比如基础的AABB盒碰撞。坐标矩阵的转换涉及到很多地方,例如投影矩阵的计算,常用的法线贴图是以切线空间为坐标系。存储也是3d坐标,最后还需要用模型的矩阵来获得法线转换矩阵。</p>
<p>所以说矩阵非常重要。<br />
而今天我们先来了解一下Godot中坐标是一个什么样子的?原点在何处?坐标如何转换。<br />
<img src="http://jolie.oss-cn-hangzhou.aliyuncs.com/2018-05-19-icon.png" alt="icon" /><br />
</div>
<footer>
<a rel="full-article" href="/blog/2018/05/19/godot-transform-1">阅读全文→</a>
</footer>
</article>
<article>
<header>
<!-- Now we're back to normal posts. Note the links used under href in both headers.-->
<h1 class="entry-title"><a href="/blog/2018/05/17/bugji-lu">记一个华为手机上声音突然消失不见的bug</a></h1>
<p class="meta">
<time datetime="2018-05-17T18:57:53+08:00" pubdate data-updated="true"></time>
</p>
</header>
<div class="entry-content"><p>背景是这样的。我们的项目需要播放许多声音。只是在部分华为的设备上声音会突然消失,然后过一会儿声音又再次出现。<br />
这个问题没有什么规律可循。<br />
一开始针对华为手机的MediaPlayer进行查找。找到的原因在<a href="https://blog.csdn.net/jiangtianhao13269230/article/details/78821932">此处</a>,认为是MediaPlayer没有被释放导致内存泄漏。但是我们及时调用了释放函数,还是没有解决问题。<br />
</div>
<footer>
<a rel="full-article" href="/blog/2018/05/17/bugji-lu">阅读全文→</a>
</footer>
</article>
<article>
<header>
<!-- Now we're back to normal posts. Note the links used under href in both headers.-->
<h1 class="entry-title"><a href="/blog/2018/05/13/tableviewcelldong-tai-kuan-gao">如何使用tableView制作一个高度可以变化的列表</a></h1>
<p class="meta">
<time datetime="2018-05-13T16:46:54+08:00" pubdate data-updated="true"></time>
</p>
</header>
<div class="entry-content"><h2 id="section">前面的话</h2>
<p>cocos引擎中提供的CCTableView组件,这个组件由于使用缓存池,创建可见对象,因此性能上相比后来的ListView高出很多。因此在做列表的时候,我一直偏向于使用TableView,但是在一次讨论中发现他有一个缺点就是只能创建cell宽高一致的列表。对于变化的cell则支持不那么友好。</p>
<p>于是抽时间看了一下TableView的实现。就有了今天的这篇分享。<br />
我要分享的主题就是如何使用TableView制作一个TablewCell高度变化的列表。<br />
闲话不多说,直接进入正题吧。<br />
</div>
<footer>
<a rel="full-article" href="/blog/2018/05/13/tableviewcelldong-tai-kuan-gao">阅读全文→</a>
</footer>
</article>
<div class="pagination">
<a class="prev" href="2">← Older</a>
<a href="/blog/archives">Blog Archives</a>
</div>
</div>
<aside class="sidebar">
<section>
<h1>Recent Posts</h1>
<ul id="recent_posts">
<li class="post">
<a href="/blog/2019/01/05/010">500人同时在线的客户端小工具</a>
</li>
<li class="post">
<a href="/blog/2018/07/08/lua-problems">Lua中事件派发而引发的问题</a>
</li>
<li class="post">
<a href="/blog/2018/07/01/unity-game-ball">用Unity实现物理碰撞游戏</a>
</li>
<li class="post">
<a href="/blog/2018/06/13/xlua-1">Xlua笔记-协程</a>
</li>
<li class="post">
<a href="/blog/2018/06/12/luacov-test">在lua项目中使用luacov进行代码覆盖率的测试</a>
</li>
<li class="post">
<a href="/blog/2018/05/26/godot-1">Godot引擎分析-1</a>
</li>
<li class="post">
<a href="/blog/2018/05/20/godot-event-1">Godot基础知识之事件穿透</a>
</li>
<li class="post">
<a href="/blog/2018/05/19/godot-transform-1">Godot基础知识之Transform坐标转换</a>
</li>
<li class="post">
<a href="/blog/2018/05/17/bugji-lu">记一个华为手机上声音突然消失不见的bug</a>
</li>
<li class="post">
<a href="/blog/2018/05/13/tableviewcelldong-tai-kuan-gao">如何使用tableView制作一个高度可以变化的列表</a>
</li>
<li class="post">
<a href="/blog/2018/05/07/androidshi-yong-dumpsysdao-chu-fps">补充在android如何使用dumpsys导出FPS</a>
</li>
<li class="post">
<a href="/blog/2018/03/09/2017xiang-mu-zong-jie">大富翁项目总结</a>
</li>
<li class="post">
<a href="/blog/2018/02/11/unity-transform-tex">Unity Shader基础函数:TRANSFORM_TEX</a>
</li>
<li class="post">
<a href="/blog/2018/02/11/ui-ai">UI测试AI遇到的问题-尚未解决的难题</a>
</li>
<li class="post">
<a href="/blog/2018/01/29/openglgldrawarrays">opengl基础之glDrawArrays和glDrawElements之间的区别</a>
</li>
<li class="post">
<a href="/blog/2018/01/07/openglji-chu-zhi-pu-tong-guang-zhao">OpenGL基础之普通光照</a>
</li>
<li class="post">
<a href="/blog/2018/01/07/openglji-chu-zhi-chang-yong-diao-yong-jie-kou">OpenGL基础之常用调用接口</a>
</li>
<li class="post">
<a href="/blog/2017/12/16/opengl-tou-shi-tou-ying-ju-zhen">OpenGL基础之透视投影矩阵</a>
</li>
<li class="post">
<a href="/blog/2017/12/15/openglji-chu-zhi-mo-ban-huan-cun">OpenGL基础之模板缓存</a>
</li>
<li class="post">
<a href="/blog/2017/12/09/openglji-chu-ju-zhen-zhi-shi">OpenGL基础之矩阵和坐标</a>
</li>
<li class="post">
<a href="/blog/2017/12/03/opengl-glitter">在xcode上运行OpenGL工程-使用Glitter</a>
</li>
<li class="post">
<a href="/blog/2017/12/03/macshang-openglhuan-jing">在xcode上运行OpenGL工程</a>
</li>
<li class="post">
<a href="/blog/2017/11/21/pygraphviz">安装pygraphviz遇到的问题</a>
</li>
<li class="post">
<a href="/blog/2017/11/12/etcge-shi-tu-pian-zui-jia-shi-jian">ETC格式图片最佳实践</a>
</li>
<li class="post">
<a href="/blog/2017/11/05/blend-modezhe-dang-xiao-guo">Game Maker:blend Mode遮挡效果</a>
</li>
<li class="post">
<a href="/blog/2017/10/29/gamemakerblendmode">Game maker:Extend Blend Mode</a>
</li>
<li class="post">
<a href="/blog/2017/10/08/hui-fang">为游戏增加记录回放功能</a>
</li>
<li class="post">
<a href="/blog/2017/10/06/cocos2dxxing-neng-you-hua">Cocos2dx游戏性能优化技巧</a>
</li>
<li class="post">
<a href="/blog/2017/09/03/gamemaker-bouncemoveerdai-ma-yue-du">[gamemaker]BounceMover代码阅读</a>
</li>
<li class="post">
<a href="/blog/2017/09/03/hao-you-xi">什么才算是好游戏?</a>
</li>
<li class="post">
<a href="/blog/2017/09/02/yu-ming-he-ipzhi-bang-ding">域名和ip之绑定</a>
</li>
<li class="post">
<a href="/blog/2017/08/05/djnago-blog-zinnia">使用djnago-blog-zinnia搭建一个博客网站</a>
</li>
<li class="post">
<a href="/blog/2017/07/17/install-luacheck">为Atom,Sublime增加linter-luacheck插件</a>
</li>
<li class="post">
<a href="/blog/2017/07/15/jekins">使用jekins打造一个自动化编译流程</a>
</li>
<li class="post">
<a href="/blog/2017/07/02/ru-he-wei-di-san-fang-c-plus-plus-ku-dao-chu-luabinding">如何为第三方c++库导出luabinding (Part One)</a>
</li>
<li class="post">
<a href="/blog/2017/06/25/ren-shi-liquidfun">认识liquidFun(流体物理引擎)</a>
</li>
<li class="post">
<a href="/blog/2017/06/11/macshang-an-zhuang-git-svnwei-sheng-xiao-de-ban-fa">MAC上安装git-svn未生效的办法</a>
</li>
<li class="post">
<a href="/blog/2017/05/24/unityzhi-zuo-platformyou-xi">Unity制作platform游戏</a>
</li>
<li class="post">
<a href="/blog/2017/05/23/shi-yong-godot">使用GoDot引擎制作一款mini小游戏</a>
</li>
<li class="post">
<a href="/blog/2017/05/14/unity-uguikong-jian">Unity UGUI控件</a>
</li>
</ul>
</section>
</aside>
</div>
</div>
<footer role="contentinfo"><p>
Copyright © 2019 - newtomato -
<span class="credit">Powered by <a href="http://octopress.org">Octopress</a></span>
</p>
</footer>
<script type="text/javascript">
(function(){
var twitterWidgets = document.createElement('script');
twitterWidgets.type = 'text/javascript';
twitterWidgets.async = true;
twitterWidgets.src = 'http://platform.twitter.com/widgets.js';
document.getElementsByTagName('head')[0].appendChild(twitterWidgets);
})();
</script>
</body>
</html>