ورود

View Full Version : چطور می توان یک shape را به صورت دورانی به حرکت در آورد؟



salehp
سه شنبه 25 تیر 1387, 10:12 صبح
اشکال این کد کجاست؟


;(procedure TForm1.Timer1Timer(Sender: TObject
begin
;t:=1
;l:=1
;shape.Left :=shape.Left + l
;shape.top :=shape.top + t
if shape.Left =500 then
;t:= 1
;l:= -l
if shape.Top =500 then
;t:= -1
;l:= -l
if shape.Left =0 then
;t:= -1
;l:= +l
if shape.Top = 0 then
;t:= +1
;l:= +l
;end


من می خواهم یک shape را در صفحه به حرکت در بیاورم ، طوری که اگر به هریک از دیواره های صفحه برخورد کرد منعکس شود ، همانند یکی از screen savar های قدیمی ویندوز.
و این کار را با استفاده از یک timer انجام دادم ، اما اشکال دارد...:متفکر:

nassim_20
سه شنبه 25 تیر 1387, 12:06 عصر
begin , end های if یادت رفته

Hsimple11
سه شنبه 25 تیر 1387, 12:14 عصر
اینگونه حرکات مایل و زاویه دار را نمیتوانید انجام دهید.

salehp
سه شنبه 25 تیر 1387, 12:19 عصر
begin , end های if یادت رفته
با begin و end هم جواب نمی دهد.

salehp
سه شنبه 25 تیر 1387, 12:26 عصر
:گریه:
اینگونه حرکات مایل و زاویه دار را نمیتوانید انجام دهید.
فقط باید وقتی به چهاچوب پایین یعنی مثلا top=500) برخورد می کند اعداد Top و left آن هر دو منفی شود، یا مثلا وقتی که به چهار چوب سمت راست برخورد می کند یعنی وقتی که left=500 می شود ، left آن منفی شود ، ولی Top همچنان بصورت قبلی صعود یا نزول کند...

Hsimple11
سه شنبه 25 تیر 1387, 12:58 عصر
زوایای انعکاس را چطور میخواهید مشخص کنید؟؟

salehp
سه شنبه 25 تیر 1387, 15:27 عصر
زوایای انعکاس را چطور میخواهید مشخص کنید؟؟
در 2 پست بالاتر در موردش کمی توضیح دادم، بطور خاص در زاویه ای منعکس نمی شود ، همین که به هر کدام از چهار چوب های بالا ، پایین ، چپ ، راست برخورد بکند ، فرمول اضافه شدن یا کاهش پیدا کردن کمی عوض می شود:
مثلا اگر با بالا برخورد کند فرمول آن
shape.Left :=shape.Left + l
;shape.top :=shape.top + t
یا اگر با پایین برخورد کند ، فرمول آن
shape.Left :=shape.Left - l
;shape.top :=shape.top - t
می شود. یا ...
من در اصل قضیه ، یعنی مفهوم مشکل ندارم ، فقط در طرز نوشتن اشکال دارم ...

Hsimple11
سه شنبه 25 تیر 1387, 15:52 عصر
دوست گرامی منظورم از زاویه انعکاس این است که وقتی مثلا از چپ به بالا خورد با همان زاویه از راست منعکس شود. در غیر اینصورت فقط یک حرکت تکراری را خواهید داشت. باید زاویه را با OpenGl در کدتان اعمال کنید.