PDA

View Full Version : سوال: حرکت دادنِ آرام آرامِ JButton ها



golsa_6
جمعه 23 تیر 1391, 12:09 عصر
سلام

من در یک پروژه چند تا JButton دارم. میخوام وقتی روی یکیشون کلیک میکنم و بعد یه جای دیگه ی نقشه کلیک میکنم، آرام آرام به نقطه ی کلیک شده حرکت کنند. (هرکدام از دکمه هام میخوام سرعت خاصی داشته باشن)

لطفا کمک کنید که چطور این را پیاده سازی کنم؟ :متفکر: (مشکلِ من در حرکت کردنِ آرام آرامِ دکمه ها با سرعت خاص است)

خیلی ممنون

spiderman200700
جمعه 23 تیر 1391, 12:31 عصر
چه نقشه ای؟
چند تا JButton ؟
دکه ها حرکت کنن و همه بیان روی یه نقطه روی هم قرار بگیرن؟

لطفا دقیق تر توضیح بدید

golsa_6
جمعه 23 تیر 1391, 12:46 عصر
پروژه ی من یه بازیه.

نقشه، نقشه ی یه دریا با سه عمق مختلف هست که روی جی پنل کشیده شده.

این دکمه ها که پنج تا هستن، کشتی ان. میخوام روی هرکدوم که کلیک کردم، انتخاب شه و به هرجای جی پنل که کلیک میکنم، حرکت کنه. (فقط همونی که انتخابش کردم)

کشتی ها هم برای حرکتشون باید سرعت های متفاوتی داشته باشند.

امیدوارم منظور رو رسونده باشم.

ممنون

spiderman200700
جمعه 23 تیر 1391, 14:21 عصر
باید برای هر دکمه یه Thread ایجاد کنید تا بتونید هر کدوم رو با سرعت خاصی حرکت بدید
وقتی روی ددکمه کلیک میکنید موقعیت فعلیش خونده میشه و وقتی روی مقصد کلیک میکنید موقعید مقصد هم خونده میشه. حالا باید توی Thread بیاید هر مثلا 50 میلی ثانیه x , y فعلی دکمه رو به اضافه ی مثلا 5 کنید تا وقتی که به x, y مقصد برسه.

در ضمن بهتره به جای دکمه از عکس استفاده کنید. چون وقتی از JButton استفاده می کنید ممکنه توی تصویر پرش داشته باشید.

golsa_6
شنبه 24 تیر 1391, 12:45 عصر
چون وقتم کمه و کارای زیادی با کشتی ها دارم، جی باتن راحت تره. استفاده کردم و خوب بود پرش نداشت.

فقط به یه مشکلی برخوردم :
شرط پایان thread را اینطوری گذاشتم:
while(!(this.getBounds().contains(xm,ym))){

که this همان دکمه و xm و ym مختصات جایی که کلیک کردم است.
اما بخاطر یک خطای محاسباتی که نمیدانم چیست، گاهی دکمه ها از چند میلیمتری نقطه ی کلیک شده، میگذرند و شرط برقرار نمیشود، پس به حرکت ادامه میدهند :(

چکار کنم بنظر شما؟ آیا میشود اطراف نقطه ی کلیک شده، یک ناحیه تعریف کرد که با گذر از آن ناحیه، دکمه ها از حرکت بایستند؟؟

با تشکر فراوان از کمک های شما :)

spiderman200700
شنبه 24 تیر 1391, 14:21 عصر
خواهش میکنم
این اختلاف چند میلیمتری به خاطر یه سری خواص Componentهای Swing هست.
تا اونجا که من میدونم اگه بخواید طوری کار کنید که چند میلیمتر هم براتون مهم باشه، باید با ابزار های سطح پایین جاوا کار کنید. یعنی با Graphics و Graphics2D
بعید میدونم Swing اجازی کار با این دقت رو بهتون بده.

golsa_6
یک شنبه 25 تیر 1391, 14:56 عصر
مشکل را با تابع distance حل کردم :)

یک سوال دیگر هم داشتم: مثلا من به این JButton ها که کشتی هستند، فرمان میدهم که به فلان نقطه روی نقشه ام بروند. اما میان راهشان یک جزیره است و من نمیخواهم از روی جزیره رد شود، بلکه میخواهم آن را دور بزنند و بروند به جایی که من گفتم.

این را با چه ایده ای میتوانم پیاده سازی کنم؟

spiderman200700
یک شنبه 25 تیر 1391, 17:05 عصر
متونید وقتی کشتی به جزیره رسید روی محیط یه دایره که قطرش برابر طول جزیره هست حرکتش بدید.