Форум: "Начинающим";
Текущий архив: 2006.05.21;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.011 c