Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 02.11.2015
Сообщений: 20
1

Создайте изображение шарика из компонентов Shape и запрограммируйте его взрыв

22.11.2016, 22:42. Показов 1822. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Создайте изображение шарика из компонентов Shape и запрограммируйте его взрыв форме, используя компонент Timer (Таймер). Помогите пожалуйста)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.11.2016, 22:42
Ответы с готовыми решениями:

Без использования циклов создайте вектор и посчитайте среднее арифметическое его компонентов
Нужна помощь с данным заданием. Фото прикрепляю

Создайте следующее изображение, расположите его в центре формы
Входные данные – длина стороны первого квадрата и количество вложенных фигур – вводятся...

Использование компонентов Image, Shape и Timer
Помогите с написанием программки. Установим на форме 7 окружностей, расположенных в виде радуги, и...

Использование компонентов Image, Shape и Timer
Здраствуйте!! У меня есть задача ее условие:Подготовьте в графическом редакторе изображение фигуры...

16
884 / 404 / 174
Регистрация: 20.10.2016
Сообщений: 1,828
23.11.2016, 07:21 2
А что есть "взрыв шарика"? Сама по себе анимация простенькая, но вот пока не будет ясно, что подразумевается под взрывом начинать работу рановато.

Не по теме:

А то может вместо шарика компьютер взорваться.

0
5784 / 4526 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
23.11.2016, 07:54 3
можно предложить взрыв кружочками - такими же шейпами
создаем в дизайнере shape1:TShape - большой кружок
и таймер t1 с интервалом например 50. t1.enabled=false

в событии shape1.OnClick делаем следующее
1. делаем этому шейпу Hide
2. создаем массив p (лучше TObjectList) объектов TParticle
Delphi
1
2
3
4
TParticle=class
  shp:TShape;
  angle: integer;
end;
для каждого объекта p[i]
Delphi
1
2
3
4
5
p[i].shp:=TShape.Create(NIL);
p[i].shp.parent := shape1.parent;
p[i].left:=shape1.left;
p[i].top:=shape1.top;
p[i].angle:=random(360);
и запускаем таймер t1.enabled:=true; и засекаем начальное время в миллисекундах
t:=GetTickCount();

в событии OnTimer вычисляем для каждой частицы по углу и прошедшему времени новые координаты
d:=GetTickCount()-t; // миллисекунд прошло
x,y - вычислите сами по уравнению прямой с углом angle и начальными точками shape1.left,top
p[i].shp.left := x;
p[i].shp.top := y;
0
0 / 0 / 0
Регистрация: 02.11.2015
Сообщений: 20
23.11.2016, 21:09  [ТС] 4
Nanotentacle, Ну нам точно не сказали, ну я думаю чтобы он разлетелся или я не знаю что. Как вы думаете?

Добавлено через 34 секунды
krapotkin, ааааа, спасибо вам огромное, но я что то запутался.
Вы делали это??
0
3586 / 2195 / 693
Регистрация: 29.05.2013
Сообщений: 9,373
23.11.2016, 21:34 5
Если делать по варианту Кропоткина, то вы получите не взрыв, а сверхновую
Боюсь, что без битмапов в разных стадиях взрыва приличной имитации не получится.
0
5784 / 4526 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
23.11.2016, 22:02 6
эмм??
мы получим N разлетающихся кружочков
если задача - реалистично показать взрыв, автору очевидно нужно еще подучить учебники
не думаю, что от него ожидают качество Lucas Film
0
3586 / 2195 / 693
Регистрация: 29.05.2013
Сообщений: 9,373
23.11.2016, 22:12 7
Ок, допускаю, что имитация частиц таким образом может и получится, только вот с начальным и конечным размером частиц надо как-то продумать. Видимо сделать один большой шарик, который на старте скрыть и с разлетом от центра мелких шариков уменьшать их размер с какой-то периодичностью до 0. Еще с RGB частиц поиграться можно, скажем от ярко-желтого в начале взрыва к темно красному в финале.
0
5784 / 4526 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
23.11.2016, 22:40 8
я-то бы конечно за простое рисование, но тут вот прямо шейпы хочут )))
0
0 / 0 / 0
Регистрация: 02.11.2015
Сообщений: 20
23.11.2016, 23:30  [ТС] 9
krapotkin, можешь пожалуйста сделать и залить сюда, потому что я некоторые моменты не понимаю как делать)
Пожалуйста
0
884 / 404 / 174
Регистрация: 20.10.2016
Сообщений: 1,828
24.11.2016, 08:05 10
pashademehin, мне кажется, лучше вам выложить свой код и рассказать, какие моменты вызывают сложности. Иначе закрадывается подозрение, что даже имея на руках полную концепцию вы не постарались даже хоть как-то ее оформить и просто хотите получить код. Не надо юлить, будьте мужчиной: не собираетесь код писать самостоятельно - так и скажите "напишите за меня". Если же я не прав, то выкладывайте код, обсудим и поможем.
0
5784 / 4526 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
24.11.2016, 08:33 11
есть еще чертежи Su-37. там тоже не все понятно. заливать сюда?
как всегда, есть модель данных в отдельном юните
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
unit MyClasses;
 
interface
uses ExtCtrls, Types, Controls, Classes, Sysutils;
 
type
 
TParticle=class
private
  function GetPosition: TPoint;
  procedure SetPosition(const Value: TPoint);
public
  shp:TShape;
  angle:single;
  start:TPoint;
  startTime:Int64;
  speed:Single; // px / msec
  function Crd(aTime:int64):TPoint;
  constructor Create(Parent: TWinControl; p:TPoint; aangle:single; aspeed:single); reintroduce;
  destructor Destroy; override;
  property Position: TPoint read GetPosition write SetPosition;
end;
 
implementation
 
{ TParticle }
 
function TParticle.Crd(aTime: int64): TPoint;
begin
  Result.X := Round(start.X + speed * (atime-startTime) * Cos(angle));
  Result.Y := Round(start.y + speed * (atime-startTime) * Sin(angle));
end;
 
constructor TParticle.Create(Parent: TWinControl; p:TPoint; aangle:single; aspeed:single);
begin
  start := p;
  startTime := TThread.GetTickCount;
  shp := TShape.Create(nil);
  shp.Parent := parent;
  shp.SetBounds(p.x,p.y,10,10);
  shp.shape := stCircle;
  angle := aangle;
  speed := aspeed;
end;
 
destructor TParticle.Destroy;
begin
  FreeAndNil(shp);
  inherited;
end;
 
function TParticle.GetPosition: TPoint;
begin
  result := Point(shp.Left, shp.Top);
end;
 
procedure TParticle.SetPosition(const Value: TPoint);
begin
  shp.Left := Value.X;
  shp.Top := Value.Y;
end;
 
end.

есть использование этой модели по таймеру в главной форме
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics,
  Controls, Forms, Dialogs, ExtCtrls, StdCtrls,
  Contnrs, MyClasses;
 
type
  TForm1 = class(TForm)
    pnl1: TPanel;
    shp1: TShape;
    tmr1: TTimer;
    procedure shp1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormCreate(Sender: TObject);
    procedure tmr1Timer(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    FStartTime:Int64;
  public
    list : TObjectList;
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  list:=TObjectList.Create;
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
  list.Free;
end;
 
procedure TForm1.shp1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  i: Integer;
  p:TParticle;
begin
  shp1.Hide;
  FStartTime := TThread.GetTickCount;
  Randomize;
  for i := 0 to 3 do
  begin
    p:=TParticle.Create(pnl1, Point(shp1.Left,shp1.Top), 2*pi*random, 0.5*random);
    list.Add(p);
  end;
  tmr1.Enabled := true;
end;
 
procedure TForm1.tmr1Timer(Sender: TObject);
var i:integer;
begin
  for i := 0 to list.Count-1 do
  begin
    TParticle(list[i]).Position := TParticle(list[i]).Crd(TThread.GetTickCount);
  end;
 
  if TThread.GetTickCount-FStartTime>5000 then
    tmr1.Enabled := False;
end;
 
end.
Миниатюры
Создайте изображение шарика из компонентов Shape и запрограммируйте его взрыв  
1
0 / 0 / 0
Регистрация: 02.11.2015
Сообщений: 20
24.11.2016, 12:31  [ТС] 12
krapotkin, Желательно на Лазарусе или Delphi 7 если можно конечно
0
Puporev
24.11.2016, 13:28
  #13

Не по теме:

Цитата Сообщение от pashademehin Посмотреть сообщение
Желательно на Лазарусе или Delphi 7
У нас тут есть девушка, так она вообще пишет на коленке.

0
5784 / 4526 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
24.11.2016, 14:38 14
так уж воспроизведите хоть, там три компонента на форме
а тексты я привел, можно прямо копировать
0
0 / 0 / 0
Регистрация: 02.11.2015
Сообщений: 20
27.11.2016, 11:29  [ТС] 15
krapotkin, Я вот не понимаю откуда у тя взялись procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);??
Было бы легче если бы сюда залил бы эту прогу
0
D1973
27.11.2016, 12:29
  #16

Не по теме:

Цитата Сообщение от pashademehin Посмотреть сообщение
Было бы легче если бы сюда залил бы эту прогу
krapotkin, да чего уж там... было бы легче, если бы ты сам съездил в этот Куда-то-тамск и сдал за ТС-а эту лабораторную :D Делов-то!!! :D

0
82 / 82 / 39
Регистрация: 17.02.2016
Сообщений: 464
27.11.2016, 12:32 17
было бы легче если бы вы хоть немного учили то что вам задают на уроках\парах
Миниатюры
Создайте изображение шарика из компонентов Shape и запрограммируйте его взрыв  
0
27.11.2016, 12:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.11.2016, 12:32
Помогаю со студенческими работами здесь

Массивы компонентов билдера. Массив Shape и StringGrid
Доброго времени суток Товарищи! Подскажите мне пожалуйста как правильно записать массив из...

Программа с использованием компонентов SpinEdit, ColorDialogs, Shape
азместите на форме компоненты, как показано на рисунке и установите их необходимые свойства в...

Нужен полет фейерверка и его взрыв
Салют должен вылетать снизу и взрываться

Опишите массив записей, содержащих фамилию абонента и номер его телефона. Запрограммируйте двоичный поиск в
Опишите массив записей, содержащих фамилию абонента и номер его телефона. Запрограммируйте двоичный...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru