動態產生元件後的控制 |
答題得分者是:liangnet
|
dachura
一般會員 ![]() ![]() 發表:2 回覆:3 積分:1 註冊:2004-03-29 發送簡訊給我 |
各位先進好: 最近在寫打磚塊的小遊戲
我希望打到磚塊後會有額外的小東西掉下來(ex:可以加分之類的)
我的想法是
對每個磚塊創造動態的image元件
再另外產生一個動態的Timer去控制他們的移動(在ontimer事件裡讓image的Top增加)
目前的進度是image已經可以弄出來了
但是不知道要怎麼控制讓它動
學長說要用dynamic_cast
看了bcb的help(看不太懂||)
也搜尋過很多站上的文章
可是都弄不出來
希望大家可以幫忙解答一下
p.s 我的C++基礎有點爛,其實都是看站上的討論文章東拼西湊去解決問題,
所以如果程式碼或觀念有很愚蠢的錯誤希望大家見諒....
void __fastcall TForm1::plus()//這是要加在我主程式的迴圈裡 { img[7*i j]=new TImage(Panel1);//我的磚塊排列是7*7,因為不大會用二維陣列所以都改成一維的 tim=new TTimer(this); img[7*i j]->Parent=Panel1; img[7*i j]->Height=25; img[7*i j]->Width=25; img[7*i j]->Transparent=true; img[7*i j]->Top=i*25 20; img[7*i j]->Left=j*75 30; ImageList2->Draw(img[7*i j]->Canvas,0,0,0,true); tim->Enabled=true; tim->Interval=10; tim->OnTimer=timOnTimer; } void __fastcall TForm1::timOnTimer(TObject *Sender) { for(i=0;i<7;i ) { for(j=0;j<7;j ) { img[7*i j]=dynamic_cast< >< > 發表人 - taishyang 於 2004/04/01 13:47:10 |
ENIX007
高階會員 ![]() ![]() ![]() ![]() 發表:28 回覆:274 積分:185 註冊:2003-11-27 發送簡訊給我 |
dachura您好
抱歉,不是很確定問題所在,只是在OnTimer事件中,
引言:delete[] img;是釋放全部喔...那當下一圈進來時要執行 img[7*i j]->Top ;就會當機了< > 請參考看看< > 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~void __fastcall TForm1::timOnTimer(TObject *Sender) { for(i=0;i<7;i ) { for(j=0;j<7;j ) { img[7*i j]=dynamic_cast
------
程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~ |
m8815010
版主 ![]() ![]() ![]() ![]() ![]() 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
引言: 各位先進好: 最近在寫打磚塊的小遊戲 我希望打到磚塊後會有額外的小東西掉下來(ex:可以加分之類的) 我的想法是 對每個磚塊創造動態的image元件 再另外產生一個動態的Timer去控制他們的移動(在ontimer事件裡讓image的Top增加) 目前的進度是image已經可以弄出來了 但是不知道要怎麼控制讓它動 學長說要用dynamic_cast 看了bcb的help(看不太懂||) 也搜尋過很多站上的文章 可是都弄不出來 希望大家可以幫忙解答一下 p.s 我的C++基礎有點爛,其實都是看站上的討論文章東拼西湊去解決問題, 所以如果程式碼或觀念有很愚蠢的錯誤希望大家見諒....dachura你好void __fastcall TForm1::plus()//這是要加在我主程式的迴圈裡 { img[7*i j]=new TImage(Panel1);//我的磚塊排列是7*7,因為不大會用二維陣列所以都改成一維的 tim=new TTimer(this); img[7*i j]->Parent=Panel1; img[7*i j]->Height=25; img[7*i j]->Width=25; img[7*i j]->Transparent=true; img[7*i j]->Top=i*25 20; img[7*i j]->Left=j*75 30; ImageList2->Draw(img[7*i j]->Canvas,0,0,0,true); tim->Enabled=true; tim->Interval=10; tim->OnTimer=timOnTimer; } void __fastcall TForm1::timOnTimer(TObject *Sender) { for(i=0;i<7;i ) { for(j=0;j<7;j ) { img[7*i j]=dynamic_cast< >< > void __fastcall TForm1::timOnTimer(TObject *Sender) { TTimer* mytimer; mytimer=(TTimer*)Sender; ShowMessage(mytimer->Name); }所以你這行不合法,但可compiler過: img[7*i j]=dynamic_cast雖然compiler是可以過,但是img[7*i j]這個Image物件並沒有真正被assign到東西! 所以這行就錯了: img[7*i j]->Top ; 因為一個沒有真正new(no initialize)的物件不可能做top 的動作,因為它連top是多少都沒有! 應該是這樣 |
liangnet
中階會員 ![]() ![]() ![]() 發表:19 回覆:148 積分:83 註冊:2004-01-03 發送簡訊給我 |
dachura你好: 你的timOnTimer裡面寫的有很大問題。
你在建立TImage後並且存到img陣列裡面,但是我看你timOnTimer卻寫了這一行
img[7*i+j]=dynamic_cast
void __fastcall TForm1::timOnTimer(TObject *Sender) { for(i=0;i<7;i ) { for(j=0;j<7;j ) { if (img[7*i j] != NULL) { img[7*i j]->Top ; if(img[7*i j]->Top>350) { delete img[7*i j]; img[7*i j] = NULL; // 不好意思少了這一行^^" } } } } } img[]最好一開始前先將內容清為NULL。發表人 - liangnet 於 2004/04/01 10:14:41 發表人 - liangnet 於 2004/04/01 10:22:05 |
dachura
一般會員 ![]() ![]() 發表:2 回覆:3 積分:1 註冊:2004-03-29 發送簡訊給我 |
|
ENIX007
高階會員 ![]() ![]() ![]() ![]() 發表:28 回覆:274 積分:185 註冊:2003-11-27 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |