第一份工作的試用期3年前就結束了,現在才抽出時間來寫一篇文章。我在大學的不同系度過了一年:第一個學期,我學習管理,第二個學期,我轉向軟件工程。我希望他們能教我如何編程,但我錯了。於是,我蒐集資料,決定一切自學。我感謝我的老師的唯一原因是他推薦我從 Stephen Pratt 的電子書“The C Programming Language”開始。這確實是一本帶有大量實踐練習的好書。我花了大約 2 個月的時間在這本書上,之後我在一個朋友的小組中偶然發現了這個在線 Java 課程,然後就開始了。 起初,我打算成為一名 Android 開發者,但隨著我學習的進步,後端對我來說似乎更有趣。順便說一下,我花了 3 個月的時間學習才達到 20 級,之後我決定嘗試找一份工作。首要任務是搬到另一個城市因為我的職位沒有任何初級 Java 開發人員的職位空缺。找了一家公司,申請了,接到了一個測試任務,給了我一周的時間完成。我必須使用 Hibernate、Servlet/JSP 和 MySQL 編寫一個簡單的 Web 應用程序。看到這些術語,我只知道MySQL是一個數據庫。起初,我非常失望。我什至決定去肯德基找工作機會,但後來我決定嘗試一下測試任務。畢竟,我總能在肯德基找到一份工作。我整個星期都在不停地工作,並設法完成了測試。我提交了我的解決方案,但它“不漂亮”,所以我又修改了 4 次。我的最後一個解決方案被證明是正確的,但是職位已經被填補,並且在 3 個月內不會接受額外的申請。你要做什麼,對嗎?在接下來的 3 個月裡,我學習了 HTML、CSS、JS、SQL 和 PHP。為什麼是PHP?我需要一種服務器語言來響應請求等。當時,servlets和jsp似乎太複雜了。最後,我製作了一個界面糟糕的成熟 Web 應用程序。我在 GitHub 上發布了我的投資組合的代碼。此時,3 個月過去了,同一家公司再次聯繫我並邀請我參加面試,並給了我另一個簡單的任務來測試我的 SQL 知識,我在幾個小時內設法完成了。與我談論就業的人暗示他們會問算法和數據結構——我還沒有時間掌握的主題。也就是說,距離面試還有 15 天。我懂了!Robert Lafore 的書“Java 中的數據結構和算法”對我有所幫助。我沒有' 兩週內沒有時間閱讀和理解所有內容,但我仍然學到了很多東西。然後面試的日子到了。我在約定的時間到了。兩個人向我打招呼,採訪開始了。說我很擔心是一種輕描淡寫的說法。我的聲音在顫抖。除了算法和數據結構,他們什麼都問。他們詢問了 Spring、DI、IoC、Hibernate、JVM 是如何工作的、垃圾收集器是如何工作的——我無法回答這些問題中的一個。我只成功回答了有關 Java Core 的問題(集合、異常、OOP 等)。還在面試的時候,我就知道我失敗了,但是沒有收到任何反饋我還是很失望。相反,我發現了我的知識差距,並開始努力工作以彌補它們。然後面試的日子到了。我在約定的時間到了。兩個人向我打招呼,採訪開始了。說我很擔心是一種輕描淡寫的說法。我的聲音在顫抖。除了算法和數據結構,他們什麼都問。他們詢問了 Spring、DI、IoC、Hibernate、JVM 是如何工作的、垃圾收集器是如何工作的——我無法回答這些問題中的一個。我只成功回答了有關 Java Core 的問題(集合、異常、OOP 等)。還在面試的時候,我就知道我失敗了,但是沒有收到任何反饋我還是很失望。相反,我發現了我的知識差距,並開始努力工作以彌補它們。然後面試的日子到了。我在約定的時間到了。兩個人向我打招呼,採訪開始了。說我很擔心是一種輕描淡寫的說法。我的聲音在顫抖。除了算法和數據結構,他們什麼都問。他們詢問了 Spring、DI、IoC、Hibernate、JVM 是如何工作的、垃圾收集器是如何工作的——我無法回答這些問題中的一個。我只成功回答了有關 Java Core 的問題(集合、異常、OOP 等)。還在面試的時候,我就知道我失敗了,但是沒有收到任何反饋我還是很失望。相反,我發現了我的知識差距,並開始努力工作以彌補它們。說我很擔心是一種輕描淡寫的說法。我的聲音在顫抖。除了算法和數據結構,他們什麼都問。他們詢問了 Spring、DI、IoC、Hibernate、JVM 是如何工作的、垃圾收集器是如何工作的——我無法回答這些問題中的一個。我只成功回答了有關 Java Core 的問題(集合、異常、OOP 等)。還在面試的時候,我就知道我失敗了,但是沒有收到任何反饋我還是很失望。相反,我發現了我的知識差距,並開始努力工作以彌補它們。說我很擔心是一種輕描淡寫的說法。我的聲音在顫抖。除了算法和數據結構,他們什麼都問。他們詢問了 Spring、DI、IoC、Hibernate、JVM 是如何工作的、垃圾收集器是如何工作的——我無法回答這些問題中的一個。我只成功回答了有關 Java Core 的問題(集合、異常、OOP 等)。還在面試的時候,我就知道我失敗了,但是沒有收到任何反饋我還是很失望。相反,我發現了我的知識差距,並開始努力工作以彌補它們。我只成功回答了有關 Java Core 的問題(集合、異常、OOP 等)。還在面試的時候,我就知道我失敗了,但是沒有收到任何反饋我還是很失望。相反,我發現了我的知識差距,並開始努力工作以彌補它們。我只成功回答了有關 Java Core 的問題(集合、異常、OOP 等)。還在面試的時候,我就知道我失敗了,但是沒有收到任何反饋我還是很失望。相反,我發現了我的知識差距,並開始努力工作以彌補它們。我在面試失敗一個月後找到了一份工作。順便說一句,我在關於 CodeGym 的討論中找到了職位空缺(CodeGym 是 CodeGym 的俄語版本——編者註). 首先,與招聘人員進行了 Skype 面試(持續了大約 2 小時)。他們詢問了 Java 核心、垃圾收集(現在我知道它是如何工作的)、數據庫和數據結構。面試官讓我分享我的屏幕並寫一個計算器。我幾乎高興得哭了,因為我一周前剛剛寫了一個計算器。對自己充滿信心,我開始了任務。但不知是因為興奮還是其他原因,我忘記了部分算法。我的屏幕被共享了。我害怕諮詢谷歌。幸運的是,我有手機,這救了我的屁股。第二天,他們要求進行面談,幾天后我收到了錄取通知書. 這不是官方職位。我的角色是一個獨資經營者的學徒。我們為活動策劃、售票等寫了一個服務。我還記得我第一天上班的情景。我的老闆花了 15 分鐘來解釋需要做什麼。“一切都清楚了嗎?” 他問。“嗯,不是真的。你能再看一遍嗎?” 我關切地問道。老闆再次解釋了一切。“現在清楚了嗎?” “是的,現在是了。” 其實,我什麼都不懂。但我不敢要求另一種解釋。我想任何受僱的人都能理解這一點。任務歸結為從 Thymeleaf 移植到 AngularJS。幸運的是,我找到了一大塊已完成的代碼,並將其用作該操作的示例。我不明白它是如何工作的,但我完成了任務。隨後,我被分配了與後端直接相關的任務。只有在實際體驗了 Spring 之後,我才開始理解我在《Spring for Professionals》中讀到的內容。我在那里工作了8個月,然後搬到了另一個城市,在那裡我很快找到了一份正式工作,工作了2年,一路上我的頭銜從“初級”變成了“中級”。然後我面對這樣一個事實,即我的工作已成為例行公事,並沒有給我帶來一絲樂趣。所以我休息了。為了不讓我的手指在休息時萎縮,我決定嘗試另一個領域:遊戲開發。更具體地說,移動遊戲開發,選擇 Android,因為我已經了解 Java。這就是我現在要詳細討論的內容。只有在實際體驗了 Spring 之後,我才開始理解我在《Spring for Professionals》中讀到的內容。我在那里工作了8個月,然後搬到了另一個城市,在那裡我很快找到了一份正式工作,工作了2年,一路上我的頭銜從“初級”變成了“中級”。然後我面對這樣一個事實,即我的工作已成為例行公事,並沒有給我帶來一絲樂趣。所以我休息了。為了不讓我的手指在休息時萎縮,我決定嘗試另一個領域:遊戲開發。更具體地說,移動遊戲開發,選擇 Android,因為我已經了解 Java。這就是我現在要詳細討論的內容。只有在實際體驗了 Spring 之後,我才開始理解我在《Spring for Professionals》中讀到的內容。我在那里工作了8個月,然後搬到了另一個城市,在那裡我很快找到了一份正式工作,工作了2年,一路上我的頭銜從“初級”變成了“中級”。然後我面對這樣一個事實,即我的工作已成為例行公事,並沒有給我帶來一絲樂趣。所以我休息了。為了不讓我的手指在休息時萎縮,我決定嘗試另一個領域:遊戲開發。更具體地說,移動遊戲開發,選擇 Android,因為我已經了解 Java。這就是我現在要詳細討論的內容。在那裡我很快找到了一份正式工作,工作了 2 年,一路上我的頭銜從“初級”變成了“中級”。然後我面對這樣一個事實,即我的工作已成為例行公事,並沒有給我帶來一絲樂趣。所以我休息了。為了不讓我的手指在休息時萎縮,我決定嘗試另一個領域:遊戲開發。更具體地說,移動遊戲開發,選擇 Android,因為我已經了解 Java。這就是我現在要詳細討論的內容。在那裡我很快找到了一份正式工作,工作了 2 年,一路上我的頭銜從“初級”變成了“中級”。然後我面對這樣一個事實,即我的工作已成為例行公事,並沒有給我帶來一絲樂趣。所以我休息了。為了不讓我的手指在休息時萎縮,我決定嘗試另一個領域:遊戲開發。更具體地說,移動遊戲開發,選擇 Android,因為我已經了解 Java。這就是我現在要詳細討論的內容。我決定嘗試另一個領域:遊戲開發。更具體地說,移動遊戲開發,選擇 Android,因為我已經了解 Java。這就是我現在要詳細討論的內容。我決定嘗試另一個領域:遊戲開發。更具體地說,移動遊戲開發,選擇 Android,因為我已經了解 Java。這就是我現在要詳細討論的內容。我的團隊。 很快,我就組建了一個 4 人的小團隊(包括我):2 名開發人員、1 名遊戲設計師和 1 名音響工程師。因為團隊裡沒有人有過遊戲開發的經驗,再加上我的假期時間有限,所以我們決定實現一個簡單的項目,我們肯定能完成。所以我們做到了!最初,截止日期是 11 月 15 日,但如您所知,按時完成項目是錯誤的。所以,我們晚了兩週完成了它。我們的技術棧包括 Java 8 和 libGDX。
發展
開發於 10 月 17 日開始。我們總共花了 45 天,期間:- 我們學習瞭如何使用 libGDX。
- 我們寫了代碼。
- 我們創建了圖形。
- 我們創造了音樂。
- 掌握如何使用遊戲引擎。
- 繪製和重繪圖稿。
- 寫音樂。
- 在https://freesound.org上搜索聲音。
- 閱讀大量關於如何推廣遊戲的文章。
-
最初,所有遊戲元素都是隨機生成的。換句話說,我們將提供者(黑洞、剪刀、忍者之星、鉛筆芯、紅心)放入一個數組中,得到一個隨機提供者,得到一個具有隨機坐標的元素。很快就很清楚這種方法“真的不是很好”。參與測試的朋友告訴我們同樣的事情,推薦使用模板。對於那些參與遊戲開發的人來說,這可能是一個顯而易見的解決方案。但是因為我們是這個領域的新手,所以這對我們來說是非常實用的建議。
所以我們創建了幾個模板:剪刀谷;鉛筆芯 — 超快地收集它們非常酷(用手指嗖嗖、嗖嗖、嗖嗖);還有一個我不知道該叫什麼的模板——我只會告訴你我們在代碼中給這個類命名的是什麼:
StraightForwardPattern
.這些模板改進了它,但不知何故它變得太可預測了。這就是為什麼我們又添加了一個:一個隨機模板。換句話說,我們現在有一些“靜態”模板和一個隨機模板(在這裡插入“完美平衡”模因)。
-
這是我們遇到的主要問題。LibGDX 在無限循環中調用 render (float delta) 方法。這是繪製所有元素的地方。鉛筆線繪製如下:我們獲取手指坐標並在那裡繪製紋理。因此,如果我們在屏幕上快速移動手指,那麼由於調用 render(delta) 方法之間的毫秒數,該行將有“間隙”。
解決辦法很簡單:我們記住上一個繪製紋理的坐標,獲取下一個坐標,如果它們之間的距離大於 X 並且手指還沒有鬆開,那麼我們就填補這個空隙。起初,我們認為這個選項可能行不通——線條會有棱角。但是我們的擔心是沒有根據的,一切都在按預期進行。
GO TO FULL VERSION