
25-05-2008, 03:37
|
|
|
|
חבר מתאריך: 30.01.07
הודעות: 261
|
|
|
טיימרים בג'אווה
התחלתי לאחרונה להכין משחק יריות כמו המשחקי פלאפון האלה שמתקדמים עם איזה מטוס ויורים קדימה.
כרגע השחקן יכול לירות על ידי לחיצה על העכבר בלי delay בין יריות ובלי אפשרות ללחוץ לחיצה ארוכה בשביל שזה ירה אוטומתית.
לכן, מה שרציתי לעשות זה כל פעם שהמשחק מצייר את עצמו, הוא יבדוק אם משתנה בוליאני (שמראה אם השחקן לוחץ על המקש של העכבר) הוא ינסה לירות.
את הירייה עשיתי ככה:
קוד:
private void shoot(int x, int y, int type){
if(test.a == false){return;}
// הקוד של היריות
test.a = false;
test.lol();
עכשיו ניסיתי לעשות את test בתור טיימר ובתור מטלה, ושניהם לא פועלים משום מה.
הטיימר אומנם עוצר את היריות, אבל הוא זורק בערך אין סוף חריגים, והמטלה פשוט תוקעת את המטלה הראשית.
הנה הקוד של שניהם:
קוד:
package space;
import java.util.TimerTask;
public class Available extends TimerTask{
protected boolean available = true;
public void run() {
available = true;
}
}
קוד:
package space;
public class testing extends Thread{
boolean a = true;
public void lol() {
try {
this.sleep(150);
} catch (Exception ex) {}
a = true;
}
}
את שניהם ניסיתי על אותו עיקרון.
משתנה בוליאני - אם הוא לא נכון אז לדלג, ואם הוא נכון אז לירות, להפוך אותו ללא נכון, ואז להתחיל את הטיימר / לחכות במטלה. כאשר הם יסתיימו, להפוך את המשתנה לנכון עוד פעם.
באותה הזדמנות - יצא לי לנסות להשתמש ב KeyListener בשביל להוסיף קיצורי דרך (לדוגמא 1,2,3,4 לנשקים), אבל לפי מה שקראתי אחר כך, אפשר להשתמש איתו רק על אובייקטים שקשורים לטקסט (TextField לדוגמא).
יש איזו שהיא דרך להשתמש בוא בשביל אובייקטים אחרים (או משהו אחר שיעשה את התפקיד) ?
אשמח אם מישהו יוכל לעזור לי 
אגב סתם אם בא למישהו לראות מה שיש לי בינתיים - תלחצו כאן (אפשר ללחוץ על הלחצנים או לגלגל את הגלגלת בעכבר בכדי להחליף נשקים).
_____________________________________
נערך לאחרונה ע"י WolfsCaptain בתאריך 25-05-2008 בשעה 03:43.
|