成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

從零開(kāi)始23天完成一款A(yù)ndroid游戲開(kāi)發(fā)(六)

移動(dòng)開(kāi)發(fā) Android 游戲開(kāi)發(fā)
Part 6:我想開(kāi)發(fā)一款 Android 游戲有一段時(shí)間了,但從來(lái)沒(méi)有一個(gè)好的 idea。最近,我一直在玩一款跑酷游戲,發(fā)現(xiàn)它實(shí)在太有意思了。這款游戲也讓我意識(shí)到,一款 Android 游戲沒(méi)有必要非要有什么大的來(lái)頭和復(fù)雜的游戲設(shè)置,簡(jiǎn)單隨意就好。

本文是這個(gè)系列的第六篇文章,記錄作者在第15至第17天的情況。

第15天: Android“后退”按鈕、主菜單、固定坐標(biāo)bug

還記得第11天屏幕坐標(biāo)和鼠標(biāo)點(diǎn)擊射擊不到外星人的問(wèn)題嗎?是的,那都是我的錯(cuò)。幸運(yùn)的是這讓我及時(shí)發(fā)現(xiàn)了很多下載游戲的Android用戶(hù)屏幕分辨率并不是800×400。在那之前我是這樣直接轉(zhuǎn)換觸摸坐標(biāo)到實(shí)際坐標(biāo):

  1. float x = Gdx.input.getX() - 240f; 
  2. float y = 400 - Gdx.input.getY(); 

這不是正確的做法。簡(jiǎn)單恰當(dāng)?shù)霓k法是通過(guò)GDX進(jìn)行轉(zhuǎn)換 :

  1. Vector3 touchPos; 
  2. touchPos.set(Gdx.input.getX(), Gdx.input.getY(), 0); 
  3. camera.unproject(touchPos); 

在Android上處理“返回”按鈕

大多數(shù)網(wǎng)上的例子在處理“返回”按鈕時(shí)都談到重載KeyDown方法。不幸的是這種辦法要求使用Stage,我沒(méi)有這么做。我知道現(xiàn)在的代碼里復(fù)制了很多Actor和Stage,但那不重要。在下一個(gè)項(xiàng)目里我才會(huì)使用Stage。

幸運(yùn)的是,我找到了解決辦法。只要在Game子類(lèi)的create()函數(shù)里添加下面函數(shù):

  1. Gdx.input.setCatchBackKey(true); 

然后在render()方法中檢查否已經(jīng)按下“返回”按鈕:

  1. if (Gdx.input.isKeyPressed(Keys.BACK)) 
  2.     Gdx.app.exit(); 

由于render()每秒鐘會(huì)被調(diào)用很多次,你可能需要一個(gè)boolean標(biāo)記變量來(lái)檢測(cè)“返回”按鈕是否已釋放。

  1. if (backReleased && Gdx.input.isKeyPressed(Keys.BACK)) 
  2.     backReleased = false
  3.     Gdx.app.exit(); 
  4. else 
  5.     backReleased = true

現(xiàn)在可以進(jìn)入游戲,進(jìn)入商店菜單,然后返回主菜單。當(dāng)然,菜單只顯示選項(xiàng),還沒(méi)有真正實(shí)現(xiàn)功能。

使用9-patch處理動(dòng)態(tài)大小的按鈕和容器

譯注:9-patch一個(gè)對(duì)png圖片做處理的工具,能夠?yàn)樯梢粋€(gè)“*.9.png”的圖片實(shí)現(xiàn)部分拉升。

我還學(xué)會(huì)了如何使用9-patch創(chuàng)建漂亮的按鈕。有一次,我意識(shí)到不得不像繪制10個(gè)大小不同的選項(xiàng)按鈕,但樣子基本上一模一樣只有里面的內(nèi)容不 同。我甚至參考了Gdx按鈕,但最終還是決定自己DIY一個(gè)。在我游戲里,按鈕有一些特殊需求,在一個(gè)文本按鈕里要結(jié)合了2張圖、4個(gè)文本以及2種不同字 體。

無(wú)論如何,我得畫(huà)一個(gè)包括所有按鈕尺寸和其他的東西的46×46 9-patch圖片,然后寫(xiě)一些代碼定制其他覆蓋在圖片上面的東西。我在構(gòu)造函數(shù)里通過(guò)TextureRegion從大皮膚里提取9-patch。減掉了一個(gè)皮膚開(kāi)關(guān)。

通過(guò)這種處理使我得以有各種不同的選擇來(lái)填充主菜單,同時(shí)我還加入了滾動(dòng)字幕給出玩法提示。我真的很喜歡這個(gè)概念,但很少有游戲使用它。有的游戲只顯在一開(kāi)始的時(shí)候有個(gè)提示。也許他們不想讓玩家看主菜單時(shí)分心吧。

下面是購(gòu)買(mǎi)強(qiáng)化道具的商店菜單:

強(qiáng)化道具

關(guān)于道具我又有了一些新點(diǎn)子。一種是可以暫時(shí)讓外星人減速,另一種是在短時(shí)間內(nèi)積分x5。我正在考慮移除之前商店里的“雙倍積分”道具。有些玩家真的很能得高分,所以這可能是一個(gè)壞主意。

另一方面,在下次裝彈前能增加射速的道具可能會(huì)大受歡迎,所以我正在加入。

我希望商店能保持只有7個(gè)道具,這樣就能剛好在一個(gè)屏幕內(nèi)顯示。但現(xiàn)在我不肯定所有可能的升級(jí)……拭目以待吧。

第16天:從GDX游戲中錄制影片

視頻地址:www.youtube.com/embed/RUy177pvT8I?rel=0

我曾想過(guò)在YouTube上傳游戲視頻,然后用recordmydesktop程序錄制,但結(jié)果一團(tuán)糟。由于libGDX和RMD不同步,我在屏幕 上看到的是一堆零件,諸如被切掉了一半的精靈等等。我搜索了一下發(fā)現(xiàn)了幾篇有用的文章?;旧隙际菍⒚繋龀梢粋€(gè)PNG文件然后組成視頻。可以想見(jiàn)這么做 會(huì)耗費(fèi)大量的磁盤(pán)空間,這對(duì)我不是大問(wèn)題。我發(fā)現(xiàn)了一個(gè)很有用的帖子:

http://www.wendytech.de/2012/07/opengl-screen-capture-in-real-time/

然而,他們的代碼有一些問(wèn)題。出于某種原因,當(dāng)我用半透明精靈疊加在背景上時(shí),由此產(chǎn)生的PNG文件在那塊區(qū)域會(huì)出現(xiàn)半透明像素。這樣生成的視頻會(huì) 有很多亂七八糟的東西。我嘗試了不同的設(shè)置,甚至改變渲染代碼,但問(wèn)題依舊。現(xiàn)在,只要一個(gè)簡(jiǎn)單的處理步驟——使用ImageMagick(加入黑色背 景)就可以解決這個(gè)問(wèn)題。所以我想,如果無(wú)論如何都要做這步處理,我可能還要在ImageMagick中做垂直翻轉(zhuǎn)。所以我關(guān)掉了代碼中的Y軸翻轉(zhuǎn),這使 得它更有效率,從而沒(méi)有必要在每一幀中分配w *h*4個(gè)字節(jié)的內(nèi)存。在800×480的屏幕上,每一幀大約需要1.5MB!

同時(shí),處理幀率(跳幀)的代碼沒(méi)有怎么優(yōu)化。處理過(guò)程跳過(guò)了幾個(gè)文件號(hào),這沒(méi)什么問(wèn)題。但同時(shí)還給每幀還創(chuàng)建了對(duì)應(yīng)的ScreenShot對(duì)象,這完全沒(méi)有必要。譬如你正在錄制30fps的視頻而游戲運(yùn)行速率是60fps,你花了一半的時(shí)間在創(chuàng)建完全用不到的對(duì)象上。

最后,F(xiàn)PS處理代碼似乎沒(méi)有釋放像素圖。所以如果你運(yùn)行了很長(zhǎng)的時(shí)間,RAM會(huì)被吃光。

所以,我從ScreenShot類(lèi)里提取出了全部的FPS代碼,剩下的代碼只負(fù)責(zé)處理連續(xù)視頻。我還注意到一些變量有初始化但從未使用過(guò)?,F(xiàn)在ScreenShot類(lèi)變得更加直觀并且易于理解:

  1. public class ScreenShot implements Runnable 
  2.     private static int fileCounter = 0
  3.     private Pixmap pixmap; 
  4.   
  5.     @Override 
  6.     public void run() 
  7.     { 
  8.         saveScreenshot(); 
  9.     } 
  10.   
  11.     public void prepare() 
  12.     { 
  13.         getScreenshot(00, Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), false); 
  14.     } 
  15.   
  16.     public void saveScreenshot() 
  17.     { 
  18.         FileHandle file = new FileHandle("/tmp/shot_"+ String.format("%06d",  fileCounter++) + ".png"); 
  19.         PixmapIO.writePNG(file, pixmap); 
  20.         pixmap.dispose(); 
  21.     } 
  22.   
  23.     public void getScreenshot(int x, int y, int w, int h, boolean flipY) 
  24.     { 
  25.         Gdx.gl.glPixelStorei(GL10.GL_PACK_ALIGNMENT, 1); 
  26.         pixmap = new Pixmap(w, h, Pixmap.Format.RGBA8888); 
  27.         Gdx.gl.glReadPixels(x, y, w, h, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, pixmap.getPixels()); 
  28.     } 

好了,全部就這么多。我在渲染循環(huán)中的每個(gè)渲染結(jié)尾加上了:

  1. ScreenShot worker = new ScreenShot(); 
  2. worker.prepare();           // grab screenshot 
  3. executor.execute(worker);   // delayed save in other thread 

考慮到完整性,在Screen的子類(lèi)添加了executor:

  1. private ExecutorService executor; 
  2. ... 
  3. executor = Executors.newFixedThreadPool(25); 

現(xiàn)在,在我的酷睿2已經(jīng)趕不上幀率了。這是好消息,一方面因?yàn)橛螒蛩俣茸兟夷軌蜾浵赂玫囊曨l,另一方面能更好地記錄截圖以供稍后導(dǎo)出視頻。所以 我添加了一個(gè)截圖熱鍵。在按住S鍵時(shí)開(kāi)始錄制,當(dāng)你只是記錄了一些有趣的片段,松開(kāi)S鍵讓PNG writer趕上進(jìn)度。當(dāng)CPU的負(fù)荷恢復(fù)到正常,意味 著PNG都生成好了,你可以再次開(kāi)始錄制。

這種方式創(chuàng)建的視頻很容易編輯。只要?jiǎng)h除不需要的PNG文件,用剩下的壓制視頻即可。而且這種方法也很容易與音樂(lè)同步,因?yàn)榭梢噪S意添加或刪除幀。

用截圖生成YouTube視頻

由于Android屏幕默認(rèn)分辨率是480×800,而最接近YouTube的分辨率是1280 x720。因此需要將圖像縮放到 432×720 ,以保持寬高比。這樣兩邊會(huì)多出很多未使用的面積。你可以把你的logo、廣告貼上去,甚至可以并排顯示兩個(gè)視頻。我決定用另一段視頻填 補(bǔ)空白,那是我用一臺(tái)手持設(shè)備拍攝的,所以圖像更小只有372×620。

現(xiàn)在,我創(chuàng)建了一個(gè)大小1280×720包含了logo的靜態(tài)圖像?,F(xiàn)在我把它混合進(jìn)游戲,并垂直翻轉(zhuǎn)。在Linux上,我使用這樣的命令:

for i in shot*png; do echo $i; convert $i -flip -filter Lanczos -resize 372x620 temp1.png; composite temp1.png back.png -geometry +126+56 $i; done

一旦所有的圖像都準(zhǔn)備就緒,就可以運(yùn)行MEncoder來(lái)導(dǎo)出視頻。YouTube建議720p的視頻采用H.264格式和5000以上的比特率 。他們還建議兩個(gè)B幀(RGB)。這里是執(zhí)行的命令:

mencoder mf://shot*.png -mf w=1080:h=720:fps=25:type=png -ovc x264 -audiofile music.mp3 -oac copy -o movie.avi -x264encopts bitrate=5000:bframes=2:subq=6:frameref=3:pass=1:nr=2000

這樣就生成了一個(gè)質(zhì)量過(guò)硬的YouTube游戲視頻。在這篇文章的開(kāi)始,你可以看到我的成果。至于音頻,我只是提取了一些游戲的音軌并沒(méi)有捕捉實(shí)際游戲中的音頻。

第17天:Android圖標(biāo)、完成道具

我喜歡Android允許(甚至建議)圖標(biāo)不是圓角矩形。這樣可以賦予游戲自己的個(gè)性風(fēng)格。起初,我考慮過(guò)給這游戲做一個(gè)特殊的圖標(biāo),但我真的非常 非常喜歡這個(gè)畫(huà)著外星人像素圖形的盾。我用Inkscape制作,這樣就可以輸出任意大小的圖片(而不像在GIMP下制作的其他一些圖形)。獻(xiàn)上 Drone Invaders官方圖標(biāo):

[[109880]]

豐富的道具

下面的視頻顯示所有收藏的強(qiáng)化道具:

http://www.youtube.com/embed/SZ73G0n6cm4?rel=0

我準(zhǔn)備了原子彈,但名字還沒(méi)有最終確定。也許會(huì)叫核彈、钚炸彈、智能炸彈或完全不同的東西。它會(huì)摧毀屏幕上的一切。Boss能抵擋一兩個(gè),但遇到三個(gè)炸彈一樣完蛋。在系統(tǒng)內(nèi)部,每個(gè)Boss有20點(diǎn)血而炸彈有8點(diǎn)的傷害。普通攻擊就是1點(diǎn)傷害,除非你升級(jí)激光。

其次,有3路散彈。射擊三次仍然要更換彈夾。這是一個(gè)非常強(qiáng)大的道具,有了它,真是人擋殺人佛當(dāng)殺佛,清理掉一波波的怪物和boss。

第三,自動(dòng)重裝填。正如名字那樣,你的激光會(huì)自動(dòng)加載。所以可以自由地射擊,射擊,再射擊。

第四,減速。它只是減緩?fù)庑侨说囊苿?dòng)速度,其他一切速度正常。在前20關(guān)這玩意兒相當(dāng)廢柴。但越到后來(lái),你就越覺(jué)得它有用。

第五,雙倍積分。在道具作用期間,獲得的點(diǎn)數(shù)翻一倍。我仍然在考慮是否要在達(dá)到某個(gè)分?jǐn)?shù)的時(shí)候給予獎(jiǎng)勵(lì),但達(dá)到高分仍是一件很酷的事情。

相關(guān):

從零開(kāi)始23天完成一款A(yù)ndroid游戲開(kāi)發(fā)(一)

從零開(kāi)始23天完成一款A(yù)ndroid游戲開(kāi)發(fā)(二)

從零開(kāi)始23天完成一款A(yù)ndroid游戲開(kāi)發(fā)(三)

從零開(kāi)始23天完成一款A(yù)ndroid游戲開(kāi)發(fā)(四)

從零開(kāi)始23天完成一款A(yù)ndroid游戲開(kāi)發(fā)(五)

從零開(kāi)始23天完成一款A(yù)ndroid游戲開(kāi)發(fā)(七)

從零開(kāi)始23天完成一款A(yù)ndroid游戲開(kāi)發(fā)(八)

翻譯:bigosaur   ImportNew.com

譯文鏈接: http://www.importnew.com/6892.html

責(zé)任編輯:閆佳明 來(lái)源: importnew
相關(guān)推薦

2014-03-13 14:02:28

Android手游速成

2014-03-13 14:27:51

2014-03-13 14:42:13

2014-03-13 14:17:05

Android手游速成

2014-03-13 15:15:33

Android手游速成

2014-03-13 15:06:30

Android手游速成

2014-03-13 14:12:52

2022-05-27 10:00:06

C++游戲引擎

2013-10-31 16:31:19

2017-09-04 13:51:29

Android

2016-08-10 14:59:41

前端Javascript工具

2021-12-30 09:10:28

游戲開(kāi)發(fā)開(kāi)發(fā)技術(shù)熱點(diǎn)

2011-04-06 15:55:50

開(kāi)發(fā)webOS程序webOS

2019-08-12 09:36:49

2015-11-17 16:11:07

Code Review

2019-01-18 12:39:45

云計(jì)算PaaS公有云

2018-04-18 07:01:59

Docker容器虛擬機(jī)

2024-12-06 17:02:26

2020-07-02 15:32:23

Kubernetes容器架構(gòu)

2020-09-28 15:13:04

鴻蒙
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产在线观看一区二区三区 | 欧美一级免费看 | 黄色一级片视频 | a黄视频 | 国产精品一区二区不卡 | 免费视频一区二区三区在线观看 | 极品久久 | 亚洲三区在线观看 | 久久久国产一区二区三区 | 亚洲欧美在线观看 | 一级片在线播放 | 日韩精品一区二区三区中文在线 | 在线中文一区 | 四虎影音| 无码一区二区三区视频 | 亚洲精品在线看 | 免费电影av | 国产色视频网站 | 久久亚洲国产精品 | 亚洲人成人一区二区在线观看 | 一级黄色毛片免费 | 欧美日日| 伊久在线 | 99爱在线免费观看 | 七七婷婷婷婷精品国产 | 黄色片在线免费看 | 久久av.com | 成人福利在线观看 | 日韩区 | 嫩草一区二区三区 | 国产一区中文字幕 | 亚洲一区视频在线播放 | 在线观看黄视频 | 玩丰满女领导对白露脸hd | 婷婷狠狠 | 精品视频一区二区三区在线观看 | 欧美一区二区三区在线视频 | 国产免费一区二区 | 亚洲欧美日韩精品久久亚洲区 | 看av网 | 国产午夜影院 |