צריך קצת עזרה בJAVA

ahillel

New member
צריך קצת עזרה בJAVA

יש לי כמה שאלות, אודה לכם מאד על תשובות: 1. עם איזה מחלקות לגרפיקה וסאונד כדאי להשתמש? Someboddy, עם מה כתבת את רוכב הטילים? 2. איך נהוג לכתוב בJAVA לולאת משחק? 3. יש איזה אתר מומלץ עם מדריכים טובים שאתם ממליצים?
 

adiel666

New member
מנסיון אישי שלי של שבוע וחצי :D

1. אין הרבה אופציות, תשתמש בImageIO.read() בשביל לטעון תמונות לתוך BufferedImage. 2. שהClass שלך ירש מRunnable ובrun תבצע את ה"updates" שלך, לפני שאתה קורא לrepaint(). 3. לא מצאתי אף אתר שבאמת שווה משהו, אולי אולי - javaboutique... אני עדין תקוע גם עם המנוע של המשחק שלי בJava, אני בונה JApplet(ולא Applet כי לJApplet יש double buffering מובנה) והצלחתי להכניס לSprite class שלי את הקטע של שקיפות פיקסלים, אבל לא את הקטע של השקיפות(Transparency) של התמונה מסביב לה, משום מה ImageIO טוען PNGs שקופים עם רקע שחור במקום שקוף ואני עובד על זה כבר יומיים ללא הצלחה. [email protected]/index3.htm :(
 

adiel666

New member
אפשרי בהחלט.

למרות שעדיף להשאיר כל מה שלא קשור לציור מחוץ לPaint לפי דעתי. אתה יכול לעשות גם override ל update()...
 

somebodddy

New member
אני לא ניסיתי לטעון PNG עם ערוץ אלפא.

פשוט טענתי תמונה רגילה, ובחרתי צבע אחד שאותו שיניתי לשקוף דרך הקוד(לא ממש זוכר איך בדיוק עושים את זה, וקוד המקור הלך עם הדיסק הקשיח{הוא מגובה איפשהו, אבל אין לי כוח לחפש}, אבל צריך לעבור פיקסל פיקסל ולשנות אותו לפיקסל שקוף אם מדובר בצבע המתאים). עוד עצה - תשתמש בפונקציה getResource(לא זוכר של איזה מחלקה זה) בשביל לקבל אובייקט URL שאותו תטען דרך ImageIO. ככה תוכל לטעון תמונות מתוך קובץ הJAR. לגבי הסאונד, השתמשתי באיזו מחלקת מיקסר, לא זוכר איך קוראים לה. יש גם אפשרות לטעון סאונד בצורה יותר פשוטה, אבל אם לא משתמשים במיקסר אז אפשר לנגד רק צליל אחד כל פעם.
 

adiel666

New member
אני כבר משתמש בgetResource

וכל הקבצים שלי בתוך הJAR, מה שכן- אני חייב דרך לטעון MP3 כי AU תופס המון(כמו WAV) אני חייב גם להשתמש בBufferedImage ולא Image משום שעם Image יש המון באגים שזה לפעמים לא עולה בApplet כי הוא לא מספיק "לטעון" אותה לחלוטין לפני שהוא מציג אותה= לא מציג אותה. אני גם חושב שאני אעבור בloop בתוך loop על 2 המימדים של התמונה, פיקסל פיקסל ואבדוק אם הוא RGB מסויים ואם כן אהפוך אותו לשקוף לחלוטין, מקווה שזה לא יותר מידיי מאמץ למחשב. כנראה שאצטרך להשתמש במיקסר גם כן.
 

voguemaster

New member
אתה מודע לעובדה ש-Image היא אבסטרקטית ?

והבעיה שאתה מציין היא בעיה ידועה שיש לכל מערכת שהיא DEPLOYED דרך ה-WEB. כבר נתקלתי בבעיות האלה והפיתרון היה די פשוט (אם כי, לא ממש זוכר אותו
).
 

adiel666

New member
סיימתי עם השקיפות

לולאה שבודקת מה הצבע של הפיקסל הראשון בתמונה וכל פיקסל ששווה בערך הצבע שלו לזה, נמחק. www.mmf2.com/java/index3.htm אז סיימתי את הSprite class ואת הAnimation class שהוא אוסף של Sprites עם Thread שמחליף תמונה כל X מילישניות שאתה קובע :) רק עוד 12 קלאסים והמנוע מושלם :D בתקווה שלא יהיו באגים, כמו שאין כרגע. חבל שלא בנו את הגרפיקה של AWT בצורה נורמלית, צריך להיות גאון בשביל לעבוד עם זה, למה לשנוא את מיקרוסופט כשאפשר לשנוא את Sun? בC# זו שורת קוד אחת, בJAVA מעל 10...
 

voguemaster

New member
זה רק בגלל שאתה לא מכיר את #C

מספיק טוב כדי לדעת שהיא חרא
. בכל אופן, אם היית צריך לעבור פיקסל פיקסל עשית משהו לא נכון. אם אתה רוצה להעלות לכאן קוד ג'אווה ושאני אבדוק מה אני יכול לעשות אתה מוזמן. סה"כ זה לא מסובך בכלל, כמו בכל דבר צריך לקרוא את התיעוד כמו שצריך..
 

adiel666

New member
קראתי את הPDF על Graphics2D

ולא מצאתי כלום שיאפשר את זה, חוץ מזה המתודה שכתבתי לצורך כך פועלת במהירות רבה ביותר על עצמים גדולים גם כן, ככה שאין לי צורך להעלות לפה שום קוד זה עובד טוב :) וC# יותר טובה :p לא יעזור כלום.
 

voguemaster

New member
משתמע מדבריך שיש לך בעיה איתי ../images/Emo2.gif

חבל, לא ידעתי.. בא לך לספר למה ?
 

voguemaster

New member
לגבי 2

אם רוצים לבנות לולאת משחק אמיתית אז מבקשים בפשטות לעצור UPDATEים של מערכת ההפעלה ל-CONTROL שהוא שטח הציור שלך. אז אפשר להקצות THREAD נפרד ובו לבצע את כל העידכונים. יש על זה מלא מדריכים...
 

adiel666

New member
זה בערך מה שאמרתי

שיורשים מRunnable ואז בתוכנית עצמה מגידירים Thread חדש, אחרי כל הInitialization של התוכנית והטעינה של מולטימדיה עושים לו Start() וזה ישר מקפיץ את התוכנית משם לפרוצדורה run(), שם אפשר לשים לולאה אינסופית שבתוכה קוראים לצביעה של התוכנית(repaint) שתקרא לpaint() ואז לThread.sleep בשביל לבצע את הלולאה כל X מילישניות. נהוג גם לתת עדיפות גבוהה לTHREAD שקשור לציור.
 
למעלה