Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.05.21;
Скачать: CL | DM;

Вниз

ping pong   Найти похожие ветки 

 
kimona   (2006-04-29 02:23) [0]

Хотелась бы cделать так чтобы когда shape1 достегает конца формы вернулся обратно

procedure TForm1.Timer1Timer(Sender: TObject);
begin
shape1.Top:=shape1.Top-3;
if shape1.Top<=form1.Height-470 then


делаю так

procedure TForm1.Timer1Timer(Sender: TObject);
begin
shape1.Top:=shape1.Top-3;
if shape1.Top<=form1.Height-470 then shape1.top:=shape1.top+3


тоже не пашет,так как после выполнения последней строки сразу выполняется первая.


 
Жуков Олег   (2006-04-29 02:55) [1]

Заведи переменную, в которой храни направление (вверх или вниз, а ещё лучше произвольный угол).
Новые координаты объекта вычисляй с учётом направления.
По достижении объектом границ меняй направление.


 
Yegorchic ©   (2006-04-29 13:50) [2]

Делал одному челу такую штуку: 2 шарика отталкивались от стенок и друг от друга. Вот исходник:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ExtCtrls, StdCtrls;

type
 TForm1 = class(TForm)
   Timer1: TTimer;
   procedure Timer1Timer(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure FormKeyDown(Sender: TObject; var Key: Word;
     Shift: TShiftState);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 s1, s2, v1, v2: TPoint;     //переменные :)

const
 R = 10;

implementation

{$R *.dfm}

procedure draww;   //процедура рисования объктов
begin
Form1.Canvas.Brush.Color := ClWhite; Form1.Canvas.FillRect(Form1.Canvas.ClipRect); //  очистка Canvas
Form1.Canvas.Brush.Color := $00E4E4E4;                        // цвет 1ого круга
Form1.Canvas.Ellipse(s1.X-10, s1.Y-10, s1.X+R, s1.Y+R);     //рисуем 1 круг
Form1.Canvas.Brush.Color := $00E8E8FF;                        //цвет 2 круга
Form1.Canvas.Ellipse(s2.X-10, s2.Y-10, s2.X+R, s2.Y+R);     // второй круг
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
//перемещение
s1.X:=s1.X+v1.X;
s1.Y:=s1.Y+v1.Y;
s2.X:=s2.X+v2.X;
s2.Y:=s2.Y+v2.Y;
//конец перемещения

//проверка столкновений друг с другом
If (s1.X<s2.X+2*R) and (s1.X+2*R>s2.X) and (s1.Y<s2.Y+2*R) and (s1.Y+2*R>s2.Y) then
begin
 v1.X:=0-(v1.X);
 v2.X:=0-(v2.X);
 v1.Y:=0-(v1.Y);
 v2.Y:=0-(v2.Y);
end;
//проверка столкновений с формой
If 0=s1.X-R then v1.X:=1;
If 0=s1.Y-R then v1.Y:=1;
If Form1.ClientWidth=s1.X+R then v1.X:=-1;
If Form1.ClientHeight=s1.Y+R then v1.Y:=-1;
If 0=s2.X-R then v2.X:=1;
If 0=s2.Y-R then v2.Y:=1;
If Form1.ClientWidth=s2.X+R then v2.X:=-1;
If Form1.ClientHeight=s2.Y+R then v2.Y:=-1;
//конец проверок

draww;       //Выводим на форму всё
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
s1.X:=30;     //X1
s1.Y:=30;     //Y1
s2.X:=160;     //X2
s2.Y:=130;     //Y2
v1.X:=1;      //Вектор направления
v1.Y:=-1;     //Вектор направления
v2.X:=-1;      //Вектор направления
v2.Y:=1;      //Вектор направления
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
if key=13 then Application.Terminate;
end;

end.



 
antonn ©   (2006-04-29 15:32) [3]

на сайте http://code.darthman.com/news.php был проведен конкурс "арканоид", несколько работ, открытые исходники, интересные решения. спросить можно там.



Страницы: 1 вся ветка

Текущий архив: 2006.05.21;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.035 c
3-1143795254
гога
2006-03-31 12:54
2006.05.21
Сортировка в TDBGridEh


15-1145774934
Mozart
2006-04-23 10:48
2006.05.21
CreateOleObject


15-1145264574
fast2
2006-04-17 13:02
2006.05.21
Вопрос знатокам физики.


15-1145869036
yaro
2006-04-24 12:57
2006.05.21
Помогите написать программу


4-1141299522
Aleksandr.
2006-03-02 14:38
2006.05.21
Как узнать часовой пояс настроек даты компьютера?