[Java] למה לא עובד ?

לועהארי

New member
[Java] למה לא עובד ?

אני מצייר עיגול ובתוכו אני רוצה לצייר את הרדיוס שלו כך שיצביע לאן שהעכבר מצביע, אבל אני לא מצליח לצייר את הרדיוס, רק את העיגול. הנה הקוד של mouseMove :
public void mouseMoved(MouseEvent e) { int mouseX = e.getX(); int mouseY = e.getY(); int centerX = ball.getXLoc() + ball.getRadius(); int centerY = ball.getYLoc() - ball.getRadius(); double alpha = Math.atan((Math.abs(mouseY - centerY)/Math.abs(mouseX - centerX))); ball.setXSpot((int)(centerX - (ball.getRadius()/Math.cos(alpha)))); ball.setYSpot((int)(centerY - (ball.getRadius()/Math.cos(alpha)))); }​
והנה השיטה שמציירת:
public void draw(Graphics g) { g.setColor(Color.red); g.fillOval (_xLoc, _yLoc, 2*_radius,2* _radius); g.setColor(Color.BLACK); int centerX = getXLoc() + getRadius(); int centerY = getYLoc() - getRadius(); g.drawLine(centerX, centerY, _xSpot, _ySpot); }//method draw​
תודה רבה.
 

eyalmnm

New member
שתי אפשרויות

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

לועהארי

New member
לא מצייר...

טוב עדכון קצר: עכשיו אני יודע שהעכבר עובד, כי הוא זורק אותי כשאני מצביע מעל המעגל שאני מחלק ב0 כדי למצוא את הזוית. את זה פשוט לתקן, אני יכול להוסיף תנאי פשוט. אבל זה עדיין לא מצייר. אני לא משתמש בPAINT אלא ב BufferStrategy שמטפל בdoubleBuffer. השיטה שמציגה היא:
strategy.show();​
שנית אני עוד לא יודע להתעסק ב Threading אבל יש לי בלולאה הראשית, העתקתי את זה ככה מאיזה אתר. אני חושב עכשיו לשנות את כל הקוד כך שאני אשים מחלקה נפרדת למאזינים ולא אעשה את הMAIN שלי:
public class Main extends Canvas implements MouseListener, MouseMotionListener​
תודה.
 

refish

New member
אתה יכול להשתמש ב...

תנסה את הפונקציה הזאת: נותן את מיקום העכבר. public boolean mouseMove(Event e,int xPos, int yPos) { x = xPos; y = yPos; return true; }
 
למעלה