`
稻-草
  • 浏览: 61826 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Tangram Puzzle游戏开发总结

阅读更多

我所做的最最坚持的事情就是写了Tangram Puzzle这个游戏。我最大的理想是不用工作;其次是自由职业者,一边旅行一边工作(野导游?哈哈)。大概在09年8月份的时候开始写的,断断续续的写,到10年3月15号凌晨1点多,正式在Marker上发布了带Admob广告免费版本。这几天每天晚上都有登录Admob盯一会儿,发现22点左右开始有访问量,应该是北美或欧洲开始天亮了;不知道周末玩的人会不会多点。

发现用Android开发效率挺低的,特别是模拟器启动,经常启动失败,要试好多次;始程序从Eclipse加载到模拟器也挺慢的,编码-运行-测试-编码 的工作循环效率特别低。

 

界面如下:



代码量:

SDK的版本:我用的是1.5;不知道目前市场上哪种SDK版本的手机最多?

美工:图片都是网上找的,有几张实在是找不到啊,没办法自己PS了下;收集图片、做图片,调风格花了不少时间。

音效:也是网上找的。(如果有个专业美工和音效,这游戏可以上一个档次。)

BUG,发现1.5SDK的一个bug,标题和状态栏同时隐藏的时候会出现屏幕向下偏移的问题;研究了许久,没解决,就只隐藏状态栏,不隐藏标题栏。

 

Admob设60秒刷新一次,这几天的战况如下:


 

PS:告诉大家一个秘密,我的游戏没有在真机上测过,我也没有真机 :D 嘘~~ 看不到评论,哎~

 

最近公司里要2场考试,还要考驾照,还得考虑装修的事,短期内没时间和心思进行更新了。

 

游戏APK见附件,欢迎提任何意见。

 

 

 

更新-----2011/10/24

数据:以XML形式保存拼图的每个点。代码中用数组Point[]表示。

旋转算法:界面图像的旋转用Matrix就可以实现,但是后台用来结果检测的数据必须手工计算。

/**
* 假设位于坐标(x1,y1)的点旋转a度,旋转后的坐标为(x2,y2);则
* x2 = (x1 - y1*tan(a)) * cos(a) = x1 * cos(a) - y1 * sin(a)
* y2 = (x1*tan(a) + y1) * cos(a) = x1 * sin(a) + y1 * con(a)
*
*
* 旋转90度
* x2 = -y1
* y2 = x1
*
* 旋转180度
* x2 = -x1
* y2 = -y1
*
* @author straw
*
*/

检测拼图是否完成算法:

这个比较复杂,想了很久,最后总结:当所有的顶点都有其他顶点与其重合,则认为通过。当然其实这个是有漏洞的,不过只有在特定场景下才会出现,不会影响使用。

 

 

 

 

 

 

 

  • 大小: 84.9 KB
  • 大小: 116 KB
  • 大小: 30.1 KB
分享到:
评论
18 楼 xiaojxiao 2010-06-30  
LZ的广告展示数量好高,可惜ecpm低了点,不然收入能上一个数量级。
17 楼 稻-草 2010-05-01  
感谢 mncc 和 void1898的测试,谢谢!
16 楼 rongchengzhuang 2010-04-29  
为什么下载不了,看不到连接哦
15 楼 bbbaa1 2010-04-26  
支持作者了。等有机器的时候。。。。
14 楼 BarryWei 2010-04-01  
引用
我最大的理想是不用工作;其次是自由职业者,一边旅行一边工作(野导游?哈哈)。


这句话够经典,拿来做QQ签名很适合……呵呵。

再者,我觉得在移动设备上作游戏和传统设备上作游戏,差别还是蛮大的。
如果有时间,哥几个一起查找哈资料,做个专题。大家看呢?
13 楼 starboy 2010-03-26  
因为该广告放在控制按钮上面,极易误点。其实广告收入大半要靠这种误点来赚的。所以如果你的软件广告很难误点,下载量多也没大用。

软件刚上线的时候,下载量只有一两千广告收入却奇高,一周后,下载量突破一万,收入却降到$1。

12 楼 kitcheng 2010-03-26  
500-1000能有这收入?那太强了,证明欧洲人用得多...
11 楼 lw223 2010-03-25  
BatiTan 写道
不错 ,楼主的想法和我有点相似哦
我的奋斗目标就是不工作,自由职业者
可以一边旅行一边赚取旅行的费用

曾经有这么一个机会摆在我面前,我放弃了。
当年不喜欢这种方式。现在很羡慕。
10 楼 稻-草 2010-03-23  
<div class="quote_title">mncc 写道</div>
<div class="quote_div">
<div class="quote_title">稻-草 写道</div>
<div class="quote_div">
<div class="quote_title">mncc 写道</div>
<div class="quote_div">
<p>Nexus One是2.1的,1.5的应用应该能跑,我每次新工程都是1.5的SDK。但是LZ,这个真的不行。运行不了。<br><br>Nexus One下启动就出错。</p>
<p> </p>
<p> </p>
</div>
<p> </p>
<p>能否将错误堆栈发给我,你运行其它1.5的应用都可以吗?</p>
</div>
<p> </p>
<p> </p>
<p> </p>
<p>好像打出来的很乱,我用Eclipse的LogCat看的,只是Copy的ERROR。</p>
<p> </p>
<pre name="code" class="异常LogCat">03-22 22:47:20.731: ERROR/PlayerDriver(52): Command PLAYER_SET_DATA_SOURCE completed with an error or info PVMFErrNotSupported
03-22 22:47:20.731: ERROR/MediaPlayer(4925): error (1, -4)

</pre>
 
<p>空指针。。。难道是读取不了音乐?</p>
</div>
<p> </p>
<p>是放音乐的时候出现问题的,但是不知道为什么。</p>
<p>查了些资料,也有人碰到这个问题;</p>
<p>也不知道怎么解决,我暂时捕获了异常;</p>
<p>至少游戏不会被force close,只是没有声音。</p>
<p> </p>
<p>
</p>
<pre name="code" class="java"> private void startBGMusic(float volume)
{
if (bgmpFail)
{
return;
}

try
{
if (bgmp == null)
{
bgmp = MediaPlayer.create(activity, R.raw.bg);
Thread.sleep(1000); // 试一下,有人连着放音乐也会出异常。
bgmp.setLooping(true);  // 原来异常在这一行抛出
}

bgmp.setVolume(volume, volume);

if (bgmp.isPlaying())
{
return;
}

bgmp.start();
} catch (Exception e)
{
e.printStackTrace();
bgmp = null;
bgmpFail = true;
return;
}
}</pre>
 
9 楼 void1898 2010-03-23  
Force close on HERO...
8 楼 sunburst 2010-03-23  
beckrabbit 写道
我看你的游戏下载次数才500到1000啊,得分也不高,就能有这么高的收入还真是厉害。我1.6的运行正常

对啊,收入好高啊,太厉害了
7 楼 mncc 2010-03-22  
<div class="quote_title">稻-草 写道</div>
<div class="quote_div">
<div class="quote_title">mncc 写道</div>
<div class="quote_div">
<p>Nexus One是2.1的,1.5的应用应该能跑,我每次新工程都是1.5的SDK。但是LZ,这个真的不行。运行不了。<br><br>Nexus One下启动就出错。</p>
<p> </p>
<p> </p>
</div>
<p> </p>
<p>能否将错误堆栈发给我,你运行其它1.5的应用都可以吗?</p>
</div>
<p> </p>
<p> </p>
<p> </p>
<p>好像打出来的很乱,我用Eclipse的LogCat看的,只是Copy的ERROR。</p>
<p>
</p>
<pre name="code" class="异常LogCat">03-22 22:47:20.731: ERROR/PlayerDriver(52): Command PLAYER_SET_DATA_SOURCE completed with an error or info PVMFErrNotSupported
03-22 22:47:20.731: ERROR/MediaPlayer(4925): error (1, -4)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925): Uncaught handler: thread main exiting due to uncaught exception
03-22 22:47:20.741: ERROR/AndroidRuntime(4925): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.strow/com.strow.TangramActivity}: java.lang.NullPointerException
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     at android.app.ActivityThread.access$2200(ActivityThread.java:119)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     at android.os.Looper.loop(Looper.java:123)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     at android.app.ActivityThread.main(ActivityThread.java:4363)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     at java.lang.reflect.Method.invokeNative(Native Method)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     at java.lang.reflect.Method.invoke(Method.java:521)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     at dalvik.system.NativeStart.main(Native Method)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925): Caused by: java.lang.NullPointerException
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     at com.strow.model.MusicPlayer.startBGMusic(MusicPlayer.java:81)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     at com.strow.model.MusicPlayer.reflashMusic(MusicPlayer.java:72)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     at com.strow.TangramActivity.onCreate(TangramActivity.java:77)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
03-22 22:47:20.741: ERROR/AndroidRuntime(4925):     ... 11 more
03-22 22:47:21.182: ERROR/AndroidRuntime(4924): ERROR: thread attach failed
</pre>
 
<p>空指针。。。难道是读取不了音乐?</p>
6 楼 beckrabbit 2010-03-22  
我看你的游戏下载次数才500到1000啊,得分也不高,就能有这么高的收入还真是厉害。我1.6的运行正常
5 楼 稻-草 2010-03-22  
<div class="quote_title">mncc 写道</div>
<div class="quote_div">
<p>Nexus One是2.1的,1.5的应用应该能跑,我每次新工程都是1.5的SDK。但是LZ,这个真的不行。运行不了。<br><br>Nexus One下启动就出错。</p>
<p> </p>
<p> </p>
</div>
<p> </p>
<p>能否将错误堆栈发给我,你运行其它1.5的应用都可以吗?</p>
4 楼 BatiTan 2010-03-22  
不错 ,楼主的想法和我有点相似哦
我的奋斗目标就是不工作,自由职业者
可以一边旅行一边赚取旅行的费用
3 楼 mncc 2010-03-22  
<p>Nexus One是2.1的,1.5的应用应该能跑,我每次新工程都是1.5的SDK。但是LZ,这个真的不行。运行不了。<br><br>Nexus One下启动就出错。</p>
<p> </p>
<p> </p>
<p>图片是连接真机的截图。安装正常。</p>
<p> </p>
<p><img src="http://dl.iteye.com/upload/attachment/222443/d6cdc5a2-f880-3199-908b-df00807b03ca.png" alt="" width="480" height="800"></p>
<p> </p>
<p> </p>
<p>运行就不对鸟。。。。。。。</p>
<p> </p>
<p><img src="http://dl.iteye.com/upload/attachment/222441/8e1d680e-5197-3a8a-b23b-a74dab296613.png" alt="" width="480" height="800"></p>
<p> </p>
2 楼 稻-草 2010-03-22  
<div class="quote_title">drhu00 写道</div>
<div class="quote_div">I'll test it on my Droid and Nexus One soon.</div>
<p> </p>
<p>Nexus是2.0的吧,能跑1.5的应用吗?</p>
1 楼 drhu00 2010-03-21  
I'll test it on my Droid and Nexus One soon.

相关推荐

Global site tag (gtag.js) - Google Analytics