第424章 碰撞箱
直播1980:網友教我手搓火箭 作者:靈台三心 投票推薦 加入書簽 留言反饋
帝都的風雪還沒停。
林希拍掉肩頭的雪,推開738廠臨時研發室的木門。
研發室原先是個雜物間。
六個煤球爐子燒得通紅,屋裏熱氣撲麵。
十幾名年輕人擠在裏麵,汗味、煤煙味、焊錫味混在一起,嗆得人嗓子發緊。
人群中央,一台14寸彩電擺在鋪著綠呢子的工作台上。
屏幕上色塊閃爍。
旁邊裸露的pcb板上,飛線密密麻麻,像蜘蛛織了半張網。
“動了動了!”
“右邊那台坦克出來了!”
“往左打!”
“快開炮!”
滿屋子的大學生拍著桌子大呼小叫,跟打仗似的。
看到林希進門,領頭的平頭青年趕緊擠出來。
他黑眼圈重得像挨了兩拳,可眼睛亮得嚇人。
這是燕大計算機係的尖子生,李建新。
“林總!”
他遞過來一個長方形硬塑料手柄。
這是林希托華閏特意從櫻花國買回來的。
李建新聲音裏壓著興奮:
“咱們花了一個禮拜,把《坦克大戰》的底子敲出來了。”
“您給掌掌眼!”
林希脫下大衣,沒客套。
他直接拉開折疊椅坐下,接過手柄。
腦海裏,彈幕已經開始飄了。
【臥槽這畫麵……說是坦克大戰,我真沒認出來。】
【這畫麵,有點抽象啊!】
【別鬧,83年的8位機能有畫麵就不錯了,你還想要虛幻5?】
【重點是這幫人一個禮拜就把雛形敲出來了!83年的大學生什麽含金量啊!】
林希沒說話,大拇指按在方向鍵上。
屏幕上,由黃色方塊拚成的粗糙坦克開始移動。
他往前推。
坦克動了。
猛地鬆手。
坦克卻像在冰麵上踩刹車,又往前滑了半個身位才停下。
林希調轉車頭,試圖貼著屏幕邊緣的磚牆走。
坦克剛蹭到牆皮,畫麵猛地一頓。
方向鍵失靈。
屏幕足足凍了兩秒。
下一刻,坦克在原地抽搐了幾下,竟然彈到了牆的另一邊。
林希又連按兩下開火鍵。
“啵——啵——”
電視喇叭裏傳出沉悶的電子音。
一個白色小點慢悠悠飄出去,打在土牆上。
停了半秒。
牆才缺了一塊。
沒有爆炸,沒有火花,小點就這麽沒了。
屋裏安靜了三秒。
腦海裏彈幕瞬間炸了。
【好家夥,這祖傳畫質,包漿都盤出來了。】
【這手感看著都急,坦克擱這溜冰呢?】
【貼牆卡死,開炮延遲。賣北美能被雅達利玩家罵到退錢。】
【這不是坦克大戰,這是坦克散步。】
林希放下手柄。
研發室裏的熱鬧勁兒,肉眼可見地矮了半截。
他轉頭看向李建新:
“說說,問題在哪。”
李建新臉一下漲紅了。
他快步走到黑板前,拿粉筆敲著流程圖,語速很快:
“林總,真不是代碼糙。”
“是這塊8位芯片算力太低。”
“主要問題在碰撞判定。”
“我們現在是逐像素掃描。”
“坦克每走一步,就拿它覆蓋的256個像素點,跟周圍障礙物逐一比對。”
“z80主頻隻有3.5兆赫茲。”
“一秒要刷新六十次畫麵,還得算敵方坦克。”
“運算量一上來,幀率直接掉到個位數。”
他攥著手裏的方格紙,聲音裏透著不甘:
“我試過降低判定頻率,四幀算一次。”
“結果坦克直接穿牆。”
“貼牆卡死,也是因為算力被吃滿了。”
“這是物理算力極限,真沒法改了。”
旁邊幾個學生跟著點頭。
在他們的認知裏,模型越完整,邏輯越嚴謹。
至於機器跑不跑得動?
那當然是機器的問題。
林希看著黑板上密密麻麻的算法草稿。
思路清晰。
也確實嚴謹。
但嚴謹不等於好用。
在課本上,這是標準答案。
在工程裏,這是拿榔頭擰螺絲。
“讓開。”
李建新愣了一下,下意識讓開半步。
林希掃了一眼代碼筆記,坐到開發機前。
“你們的思路沒問題。”
“但代碼不是這麽寫的。”
他拿起粉筆,在黑板上畫了個不規則的坦克輪廓。
“你們現在算每一個像素。”
“可玩家看不到像素。”
說著,他幹脆利落地在坦克外麵畫了一個長方形方框。
“給每個物體包一個看不見的矩形邊界。”
“在電腦裏,它就是四個數。”
“x1,y1,x2,y2。”
“牆壁也一樣。”
林希用粉筆敲了敲黑板:
“判定碰撞時,不比像素。”
“隻比這四個坐標。”
“x軸有沒有重疊?”
“y軸有沒有重疊?”
“都有,就是撞了。”
“兩次比較,一次加減,完事。”
“這叫碰撞箱。”
屋子裏瞬間靜了。
李建新半張著嘴。
腦子裏像被人敲了一錘。
不用算幾百個像素?
隻算四個坐標?
“兩次?”
他聲音有點發幹。
林希看他一眼。
“兩次。”
他轉回身,雙手壓上鍵盤。
每一下敲擊,都像敲在李建新的心口上。
屏幕上,幾百行臃腫的像素判定代碼被刪掉。
匯編指令一行行跳出來。
……
林希沒有重寫全部程序。
他隻把最吃算力的核心判定剜了出來,換成一段幹淨到近乎寒酸的邏輯。
不到兩分鍾。
核心邏輯十七行。
連注釋都沒寫。
“編譯,運行。”
林希按下回車,把手柄丟給李建新。
畫麵刷新。
李建新咽了口唾沫,大拇指按下方向鍵。
坦克啟動。
沒有延遲。
鬆手。
穩穩停住。
一毫米都沒多滑。
他死死貼住磚牆往上推搖杆。
黃色坦克順著牆根往上走,絲滑得像抹了油。
不卡頓。
不穿牆。
他猛按開炮鍵。
“砰砰砰!”
三發炮彈幾乎沒有延遲,幹淨利落地砸穿磚牆。
監控數據上,算力占用瞬間降了三成。
李建新僵在原地。
周圍幾個學生看看屏幕,又看看黑板上的方框。
沒人說話。
困擾他們五天五夜的“物理極限”,被四個坐標點幹碎了。
直播間彈幕滾動起來:
【我去,碰撞箱!aabb碰撞箱!】
【這玩意兒後世是遊戲引擎第一課,但在83年……他們連遊戲引擎都沒聽過。】
【主播這是拿三十年後的行業共識,降維打擊八十年代萌新啊。】
【工業設計第一法則:能偷懶絕不硬算!】
林希拍掉肩頭的雪,推開738廠臨時研發室的木門。
研發室原先是個雜物間。
六個煤球爐子燒得通紅,屋裏熱氣撲麵。
十幾名年輕人擠在裏麵,汗味、煤煙味、焊錫味混在一起,嗆得人嗓子發緊。
人群中央,一台14寸彩電擺在鋪著綠呢子的工作台上。
屏幕上色塊閃爍。
旁邊裸露的pcb板上,飛線密密麻麻,像蜘蛛織了半張網。
“動了動了!”
“右邊那台坦克出來了!”
“往左打!”
“快開炮!”
滿屋子的大學生拍著桌子大呼小叫,跟打仗似的。
看到林希進門,領頭的平頭青年趕緊擠出來。
他黑眼圈重得像挨了兩拳,可眼睛亮得嚇人。
這是燕大計算機係的尖子生,李建新。
“林總!”
他遞過來一個長方形硬塑料手柄。
這是林希托華閏特意從櫻花國買回來的。
李建新聲音裏壓著興奮:
“咱們花了一個禮拜,把《坦克大戰》的底子敲出來了。”
“您給掌掌眼!”
林希脫下大衣,沒客套。
他直接拉開折疊椅坐下,接過手柄。
腦海裏,彈幕已經開始飄了。
【臥槽這畫麵……說是坦克大戰,我真沒認出來。】
【這畫麵,有點抽象啊!】
【別鬧,83年的8位機能有畫麵就不錯了,你還想要虛幻5?】
【重點是這幫人一個禮拜就把雛形敲出來了!83年的大學生什麽含金量啊!】
林希沒說話,大拇指按在方向鍵上。
屏幕上,由黃色方塊拚成的粗糙坦克開始移動。
他往前推。
坦克動了。
猛地鬆手。
坦克卻像在冰麵上踩刹車,又往前滑了半個身位才停下。
林希調轉車頭,試圖貼著屏幕邊緣的磚牆走。
坦克剛蹭到牆皮,畫麵猛地一頓。
方向鍵失靈。
屏幕足足凍了兩秒。
下一刻,坦克在原地抽搐了幾下,竟然彈到了牆的另一邊。
林希又連按兩下開火鍵。
“啵——啵——”
電視喇叭裏傳出沉悶的電子音。
一個白色小點慢悠悠飄出去,打在土牆上。
停了半秒。
牆才缺了一塊。
沒有爆炸,沒有火花,小點就這麽沒了。
屋裏安靜了三秒。
腦海裏彈幕瞬間炸了。
【好家夥,這祖傳畫質,包漿都盤出來了。】
【這手感看著都急,坦克擱這溜冰呢?】
【貼牆卡死,開炮延遲。賣北美能被雅達利玩家罵到退錢。】
【這不是坦克大戰,這是坦克散步。】
林希放下手柄。
研發室裏的熱鬧勁兒,肉眼可見地矮了半截。
他轉頭看向李建新:
“說說,問題在哪。”
李建新臉一下漲紅了。
他快步走到黑板前,拿粉筆敲著流程圖,語速很快:
“林總,真不是代碼糙。”
“是這塊8位芯片算力太低。”
“主要問題在碰撞判定。”
“我們現在是逐像素掃描。”
“坦克每走一步,就拿它覆蓋的256個像素點,跟周圍障礙物逐一比對。”
“z80主頻隻有3.5兆赫茲。”
“一秒要刷新六十次畫麵,還得算敵方坦克。”
“運算量一上來,幀率直接掉到個位數。”
他攥著手裏的方格紙,聲音裏透著不甘:
“我試過降低判定頻率,四幀算一次。”
“結果坦克直接穿牆。”
“貼牆卡死,也是因為算力被吃滿了。”
“這是物理算力極限,真沒法改了。”
旁邊幾個學生跟著點頭。
在他們的認知裏,模型越完整,邏輯越嚴謹。
至於機器跑不跑得動?
那當然是機器的問題。
林希看著黑板上密密麻麻的算法草稿。
思路清晰。
也確實嚴謹。
但嚴謹不等於好用。
在課本上,這是標準答案。
在工程裏,這是拿榔頭擰螺絲。
“讓開。”
李建新愣了一下,下意識讓開半步。
林希掃了一眼代碼筆記,坐到開發機前。
“你們的思路沒問題。”
“但代碼不是這麽寫的。”
他拿起粉筆,在黑板上畫了個不規則的坦克輪廓。
“你們現在算每一個像素。”
“可玩家看不到像素。”
說著,他幹脆利落地在坦克外麵畫了一個長方形方框。
“給每個物體包一個看不見的矩形邊界。”
“在電腦裏,它就是四個數。”
“x1,y1,x2,y2。”
“牆壁也一樣。”
林希用粉筆敲了敲黑板:
“判定碰撞時,不比像素。”
“隻比這四個坐標。”
“x軸有沒有重疊?”
“y軸有沒有重疊?”
“都有,就是撞了。”
“兩次比較,一次加減,完事。”
“這叫碰撞箱。”
屋子裏瞬間靜了。
李建新半張著嘴。
腦子裏像被人敲了一錘。
不用算幾百個像素?
隻算四個坐標?
“兩次?”
他聲音有點發幹。
林希看他一眼。
“兩次。”
他轉回身,雙手壓上鍵盤。
每一下敲擊,都像敲在李建新的心口上。
屏幕上,幾百行臃腫的像素判定代碼被刪掉。
匯編指令一行行跳出來。
……
林希沒有重寫全部程序。
他隻把最吃算力的核心判定剜了出來,換成一段幹淨到近乎寒酸的邏輯。
不到兩分鍾。
核心邏輯十七行。
連注釋都沒寫。
“編譯,運行。”
林希按下回車,把手柄丟給李建新。
畫麵刷新。
李建新咽了口唾沫,大拇指按下方向鍵。
坦克啟動。
沒有延遲。
鬆手。
穩穩停住。
一毫米都沒多滑。
他死死貼住磚牆往上推搖杆。
黃色坦克順著牆根往上走,絲滑得像抹了油。
不卡頓。
不穿牆。
他猛按開炮鍵。
“砰砰砰!”
三發炮彈幾乎沒有延遲,幹淨利落地砸穿磚牆。
監控數據上,算力占用瞬間降了三成。
李建新僵在原地。
周圍幾個學生看看屏幕,又看看黑板上的方框。
沒人說話。
困擾他們五天五夜的“物理極限”,被四個坐標點幹碎了。
直播間彈幕滾動起來:
【我去,碰撞箱!aabb碰撞箱!】
【這玩意兒後世是遊戲引擎第一課,但在83年……他們連遊戲引擎都沒聽過。】
【主播這是拿三十年後的行業共識,降維打擊八十年代萌新啊。】
【工業設計第一法則:能偷懶絕不硬算!】