Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2011, 17:37   #21
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
А вне контекста TShar X и Y - не существуют...
ну метод distance это всетаки констекст TShar
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 06.05.2011, 05:47   #22
Alena_44
Пользователь
 
Аватар для Alena_44
 
Регистрация: 24.04.2011
Сообщений: 18
По умолчанию

Как мне достать радиус из массива shars???
Я пишу
Код:
distance(Items[i].Radius)
Что неправильно? Выдаётся ошибка
Цитата:
Undeclared identifier: 'Radius'
И ещё одна ошибка:
Private symbol 'kill' declared but never used
Как от неё избавиться?
Alena_44 вне форума Ответить с цитированием
Старый 06.05.2011, 07:29   #23
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Items пренадлежит классу ObjectList, а не шару. Это список, хранящий ссылки на объекты, не более, и возвращает он ссылки на предка всея объектов - TObject. Потому его нужно приводить к типу нужного нам класса - шарика
Код:
distance(TShar(Items[i]).Radius)
P.S. А вообще молодца, девченка... Не многие студены дотягивают до понимания такого. Большинство забивают на это кол, даже не пытаясь разобраться, и видя что тут за них все писать никто не будет. Респект короче
I'm learning to live...

Последний раз редактировалось Stilet; 06.05.2011 в 07:31.
Stilet вне форума Ответить с цитированием
Старый 06.05.2011, 11:59   #24
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Цитата:
И ещё одна ошибка:
Private symbol 'kill' declared but never used
Как от неё избавиться?
Это не ошибка, а уведомление. Где-то объявлен "kill", однако он не используется в программе (т.е. не меняется, к нему никто не обращается).
Если он не нужен - найти место объявления и убрать из него объявление, уведомление исчезнет.
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 06.05.2011, 13:25   #25
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
distance(TShar(Items[i]).Radius)
для объектов более безопаснен такой тайпкаст (лучше привыкать сразу)
Код:
distance((Items[i] as TShar).Radius)
Цитата:
Сообщение от Stilet Посмотреть сообщение
P.S. А вообще молодца, девченка... Не многие студены дотягивают до понимания такого. Большинство забивают на это кол, даже не пытаясь разобраться, и видя что тут за них все писать никто не будет. Респект короче
абсолютно согласен ! проявляет старание, чем и заслуживает уважение и более деликатное отношение, всем бы в пример ставить
phomm вне форума Ответить с цитированием
Старый 08.05.2011, 06:51   #26
Alena_44
Пользователь
 
Аватар для Alena_44
 
Регистрация: 24.04.2011
Сообщений: 18
По умолчанию

Спасибо большое)))
Но у меня опять возникла проблема... Шарики не хотят удалятся((
Уже даже пишу
Код:
function TShar.distance: boolean;
begin
Result:= true

end;

procedure TShar.Kill;
var i:integer;
begin
with TForm1(Form).Shars do begin
 for i:=0 to Count-1 do
  if (self<>Items[i]) and distance=true then
    delete(i);
end;
end;
т.е. Шариков вроде вообще появиться не должно, но они летают как ни в чём не бывало (((
Alena_44 вне форума Ответить с цитированием
Старый 08.05.2011, 08:27   #27
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

этот код ни о чем не говорит... надо кроме самого кода, который возможно неправильно составлен ( меня смущает проверка (self<>Items[i]) и неизвестный метод delete(i) , это не функция ли для работы со строкой ?) также надо его ещё и грамотно вызвать, сообразуясь с задачей. советую Вам выложить весь проект... и описание того чего вы хотите добиться НА ПРОГРАММНОМ УРОВНЕ чтобы все поняли, а то "не хотят удаляться " это чрезвычайно размытое понятие
phomm вне форума Ответить с цитированием
Старый 08.05.2011, 09:02   #28
Alena_44
Пользователь
 
Аватар для Alena_44
 
Регистрация: 24.04.2011
Сообщений: 18
По умолчанию

В общем я хочу чтобы при столкновении шариков из списка shars удалялся меньший по радиусу.
Пытаюсь сделать чтобы шарики хотя бы просто исчезали при столкновении. Вот исчезать они и не хотят.

Вот код. В нём шарики вроде появляться не должны, но появляются.

Код:
unit SharikiUnit1;

interface

uses      contnrs,
  Windows, Messages, SysUtils, {Variants,} Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TShar=class
   private
    Fy: double;
    Fx: double;
    FRadius: Double;
    angle:Double;
    procedure draw;
    procedure Setx(const Value: double);
    procedure Sety(const Value: double);
    procedure SetRadius(const Value: Double);
    procedure kill;

    function dist:Boolean;
    function distance:Boolean;
   public
    Form:TForm;
    property Radius:Double read FRadius write SetRadius;
    property x:double read Fx write Setx;
    property y:double read Fy write Sety;
    procedure Step(ByStep:Double=30);
    constructor Create(f:TForm);
  end;

  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private  shars:TObjectList;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TShar }

constructor TShar.Create(f: TForm);
begin
 Form:=f;
 angle:=random(7);
end;



function TShar.dist;               
begin
 Result:=((x-radius)>0)and((x+radius)<form.Width)and((y-radius)>0)and((y+radius)<form.Height);
end;

procedure TShar.draw;         
begin
 with form.Canvas do begin
  Brush.Style:=bsClear;
  Ellipse(round(fx-Radius/2),round(fy-Radius/2),round(fx+Radius/2),round(fy+Radius/2));
 end;
 Step;
end;

// Не нужные процедуры
procedure TShar.SetRadius(const Value: Double);
begin
  FRadius := Value;
end;

procedure TShar.Setx(const Value: double);
begin
  Fx := Value;
end;

procedure TShar.Sety(const Value: double);
begin
  Fy := Value;
end;
//

procedure TForm1.FormCreate(Sender: TObject);
var s:TShar;  i:integer;
begin              Randomize;
 shars:=TObjectList.Create;              
 for i:=1 to 4 do begin
  s:=TShar.Create(Form1); shars.Add(s);
  s.Radius:=random(200);
  s.x:=random(Width-round(s.Radius));
  s.y:=random(Height-round(s.Radius));
 end;
end;

procedure TForm1.FormDestroy(Sender: TObject);               
begin
 shars.Free;
end;

procedure TForm1.FormPaint(Sender: TObject);
var i:integer;
begin
 for i:=0 to shars.Count-1 do TShar(shars[i]).draw;   
end;

procedure TShar.Step;
begin
 if not dist then angle:=angle+pi/(4+random(2));     
 fx:=fx+ByStep*cos(angle);
 fy:=fy+ByStep*sin(angle);
end;

function TShar.distance: boolean;
begin
Result:= true
end;

procedure TShar.Kill;
var i:integer;
begin
with TForm1(Form).Shars do begin
 for i:=0 to Count-1 do
  if (self<>Items[i]) and distance=true then
    delete(i);
end;
end;


procedure TForm1.Timer1Timer(Sender: TObject);
begin
Repaint;
end;

end.
Alena_44 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шарики движутся рывками wint1000 Фриланс 28 30.11.2010 17:02
Шарики движутся рывками wint1000 Общие вопросы Delphi 9 28.11.2010 22:21
Шарики sk1p Общие вопросы C/C++ 1 06.04.2010 01:11
Летающие ссылки Yudgin Gamedev - cоздание игр: Unity, OpenGL, DirectX 6 31.08.2007 14:19