上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
Okerofujin 略有貢獻的成員
註冊時間: 2007-10-19 文章: 71
-40.53 果凍幣
|
發表於: 2008-8-22, AM 2:19 星期五 文章主題: 問題 |
|
|
問題
Okerofujin 在 2018-7-5, PM 11:37 星期四 作了第 1 次修改 |
|
回頂端 |
|
|
yag Site Admin
註冊時間: 2007-05-02 文章: 689
2704.11 果凍幣
|
發表於: 2008-8-22, AM 7:59 星期五 文章主題: Re: 如何使用DDraw做出子彈連射的功能??? |
|
|
HPkon 寫到: | 請問一下各位大人
就是要如何用DDraw做出子彈連射的功能
在下只能做出按一次按鍵就發射一顆子彈的功能
但沒辦法做出連續按按鍵來發射多顆子彈的功能
拜託哪位會的大人敎一下吧!!!
謝謝!!! |
說實在的
DDraw是已經完全被淘汰的東西
現在應該是已經沒有任何一間遊戲公司使用這個了
就算是早期有使用這個的遊戲引擎
恐怕也早就都使用D3D改寫掉了
你現在學這個,將來恐怕是不會有派上用場的一天
言歸正傳
請你先把你按一次按鍵發射一顆子彈的相關程式碼貼上來吧
直接對程式碼講解會比較快也比較清晰
而且畢竟條條大路通羅馬
想達成一樣效果有很多種方式
可並不是所有方式都符合你目前的程式架構
因此你發問時如果沒把細節貼上來
那回答了也有很大機率是牛頭不對馬嘴,白回答的
另外我個人想問一下什麼是「連續按按鍵來發射多顆子彈」?
是指按鍵一直壓著就自動連射嗎?
還是單純就指按十下發射十顆子彈?
但這跟按一下發射一顆子彈不是一樣的效果嗎?
難不成你射出一顆子彈後就再也射不出第二顆?
還請盡量詳述自己的問題
不要留下模棱兩可的空間 |
|
回頂端 |
|
|
還是零分 散播福音的祭司
註冊時間: 2007-09-19 文章: 164
653.83 果凍幣
|
發表於: 2008-8-22, AM 8:33 星期五 文章主題: |
|
|
DDraw開發的遊戲在Vista上會有問題
D3D還OK
你問的問題是指壓住按鍵連射子彈吧
會不會是你把發射子彈的程式碼寫在CALLBACK_WndProc(訊息處理函式)裡
結果只有按下的時候會執行發射
而且只執行一次
要連射的話應該把發射子彈的程式碼寫在遊戲迴圈中
然後用一個Flag標示著子彈是否處於連發狀態
從訊息處理函式得知按鍵被按下就標示Flag為連發狀態
得知按鍵放開就否定Flag為連發狀態 |
|
回頂端 |
|
|
Okerofujin 略有貢獻的成員
註冊時間: 2007-10-19 文章: 71
-40.53 果凍幣
|
發表於: 2008-8-23, AM 3:15 星期六 文章主題: |
|
|
問題
Okerofujin 在 2018-7-5, PM 11:37 星期四 作了第 1 次修改 |
|
回頂端 |
|
|
yag Site Admin
註冊時間: 2007-05-02 文章: 689
2704.11 果凍幣
|
發表於: 2008-8-23, AM 11:20 星期六 文章主題: |
|
|
因為你只有一組變數在存子彈的位置
所以才會一直壓著空白鍵時子彈就被你設回原點
你想連射子彈的話,畫面上就必須同時存在不同的子彈
也就是有幾個子彈你就必須有幾組座標
建議你將子彈寫成類別
並新增一個子彈的管理者類別
每當按一次空白鍵時new一個新的子彈物件出來
然後把這子彈物件丟給管理者記錄起來
並由管理者負責每個frame所有子彈物件的座標更新與死亡判斷
死亡判斷是指當子彈超出畫面外時要把子彈delete掉 |
|
回頂端 |
|
|
Okerofujin 略有貢獻的成員
註冊時間: 2007-10-19 文章: 71
-40.53 果凍幣
|
發表於: 2008-8-23, PM 2:45 星期六 文章主題: |
|
|
問題
Okerofujin 在 2018-7-5, PM 11:38 星期四 作了第 1 次修改 |
|
回頂端 |
|
|
yag Site Admin
註冊時間: 2007-05-02 文章: 689
2704.11 果凍幣
|
發表於: 2008-8-23, PM 4:37 星期六 文章主題: |
|
|
HPkon 寫到: | 果然如此!!!
在下之前是有想到過這個方法
可是我不太清楚這方法要怎麼寫成程式碼
問一下喔!!!
管理者是指smart point嗎??? |
不是
管理者裡可以有smart pointer
但那只是額外的功能
跟管理者本身無關
管理者重要的只是將被管理者存一個列表並提供相關的管理方法
換句話說
你用個vector去把new出來的子彈物件全存起來
然後提供些對這群子彈物件做處理的函式
這樣就是個管理者了 |
|
回頂端 |
|
|
Okerofujin 略有貢獻的成員
註冊時間: 2007-10-19 文章: 71
-40.53 果凍幣
|
發表於: 2008-8-23, PM 5:14 星期六 文章主題: |
|
|
問題
Okerofujin 在 2018-7-5, PM 11:38 星期四 作了第 1 次修改 |
|
回頂端 |
|
|
Okerofujin 略有貢獻的成員
註冊時間: 2007-10-19 文章: 71
-40.53 果凍幣
|
發表於: 2008-8-24, PM 4:20 星期日 文章主題: |
|
|
問題
Okerofujin 在 2018-7-5, PM 11:38 星期四 作了第 1 次修改 |
|
回頂端 |
|
|
yag Site Admin
註冊時間: 2007-05-02 文章: 689
2704.11 果凍幣
|
發表於: 2008-8-24, PM 5:17 星期日 文章主題: |
|
|
HPkon 寫到: | 謝謝各位大人的幫忙
在下做出了連射子彈的功能
但是現在有個小問題
那就是怎麼清除圖片
就是在下有個圖片在螢幕上移動
然而移動到特定位置時它必須要消失
可是在下怎麼試就是不行
懇請各位大人再幫忙一下吧!!!
謝謝!!! |
如我上面所說
這種情況實在有無限多種可能
不附上程式碼或者詳細解說自己的問題的話
回答了絕多情況下都是白回答的…
比如說
你那個圖片如果是個new出來的類別物件
那delete掉就好了啊
你覺得這個答案有幫助嗎…? |
|
回頂端 |
|
|
vamper 對這略感興趣的新人
註冊時間: 2007-06-23 文章: 29 來自: 台灣 18.82 果凍幣
|
發表於: 2008-8-24, PM 7:16 星期日 文章主題: |
|
|
yag 寫到: | HPkon 寫到: | 謝謝各位大人的幫忙
在下做出了連射子彈的功能
但是現在有個小問題
那就是怎麼清除圖片
就是在下有個圖片在螢幕上移動
然而移動到特定位置時它必須要消失
可是在下怎麼試就是不行
懇請各位大人再幫忙一下吧!!!
謝謝!!! |
如我上面所說
這種情況實在有無限多種可能
不附上程式碼或者詳細解說自己的問題的話
回答了絕多情況下都是白回答的…
比如說
你那個圖片如果是個new出來的類別物件
那delete掉就好了啊
你覺得這個答案有幫助嗎…? |
恩...相當直覺XD
或者..把要消失的圖換上alpha值255的圖,然後開啟alpha test
你覺得這個答案有幫助嗎?
這玩笑還是不要開
要在某個特定地區消失的話(如:螢幕外面),請看一下AABB的碰撞偵測,
再針對每個bullet加上一個flag,來表示生存或死亡(就是顯示或不顯示)。 |
|
回頂端 |
|
|
Okerofujin 略有貢獻的成員
註冊時間: 2007-10-19 文章: 71
-40.53 果凍幣
|
發表於: 2008-8-24, PM 11:56 星期日 文章主題: |
|
|
問題
Okerofujin 在 2018-7-5, PM 11:38 星期四 作了第 1 次修改 |
|
回頂端 |
|
|
yag Site Admin
註冊時間: 2007-05-02 文章: 689
2704.11 果凍幣
|
發表於: 2008-8-25, AM 8:33 星期一 文章主題: |
|
|
話說…你想讓它消失的某個圖片到底是哪個?
我看不論是人物或子彈都有消失啊
題外話,你的程式變得好lag |
|
回頂端 |
|
|
Okerofujin 略有貢獻的成員
註冊時間: 2007-10-19 文章: 71
-40.53 果凍幣
|
發表於: 2008-8-25, AM 9:10 星期一 文章主題: |
|
|
問題
Okerofujin 在 2018-7-5, PM 11:39 星期四 作了第 1 次修改 |
|
回頂端 |
|
|
yag Site Admin
註冊時間: 2007-05-02 文章: 689
2704.11 果凍幣
|
發表於: 2008-8-25, PM 3:36 星期一 文章主題: |
|
|
HPkon 寫到: | yag 寫到: |
話說…你想讓它消失的某個圖片到底是哪個?
我看不論是人物或子彈都有消失啊
題外話,你的程式變得好lag |
我是想讓子彈的圖片消失
我的程式會變lag
是因為在Game_Main()區塊最下面的if(XD[ix].by<80)裡
有一行程式碼是g_Display.Blt(0,0,g_pSurface1);
因為這行程式碼的關係
所以我的程式執行到後期會很lag
可是如果不加這行的話
當XD[ix].by<80時
子彈的圖片是不會消失的
所以想說是不是有其他替代的程式碼??? |
你加那行只是治標
請把XD裡的資料清掉
不然即使沒有這行
過久一點你一樣會lag
雖然說因為子彈的圖小
所以我測到存了1xxx個子彈都還沒lag
但不代表它量積到1萬、2萬以上還不會lag
代碼: | if(XD[ix].by<80)
{
if(iter!=XD.end())
{
iter = XD.erase(iter);
}
}
else
iter++; |
用以上的程式碼就可以清掉了
另外開頭那個iter++;已經被我拉到下面來
記得要把迴圈開頭那個iter++;刪了
ps1.你要治標也別用拿圖去蓋的方式,你直接把畫子彈那個用if(XD[ix].by>=80)來反向判斷不就好了。
ps2.既然用了iterator就沒必要使用size_type,請直接用iter來做迴圈判斷。 |
|
回頂端 |
|
|
|