{{notification.text}}

MirGames

01.06.09 10:59
0
Не секрет, что в системе Дельфи и в самой ОС Windows реализована событийная система (onClick,onMove,onResize) для визуальных элементов (окна, кнопки и т.д.). Меня, как "неосведомленного" Barsicista, интересует такой вопрос: возможно ли событийно-подобная реализация для создоваемого объекта с нуля? К примеру, создаем тип TMonster и хочется создать в нем некое событие onStartAttack, а потом при создании новых объектов-переменных (var Monster, var Ghost, var Elf) назначать на это событие нужной действие, т.е. чтобы при начале прыжка у каждого монстра просиходили разные действия, другими словами своя внешняя функция.
#1
01.06.09 12:41
0
конечно возможно

Код


tMonster=class
    fOnStartCallback : procedure;
    procedure SetAttackCallback(value : procedure );
public
    property OnStartAttack : procedure read fOnStartAttack write SetAttackCallback;

   // какая то процедура которая вызывается при обновлении
   procedure Update()
end;

implementation

procedure Tmonster.SetAttackCallback(value : procedure);
begin
   fOnStartAttack := value;
end;

procedure tMonster.Update();
begin
  if ( какое то условие начала атаки) then begin
     if(assigned(fOnStartAttack)) then fOnStartAttack();
  end;
  ...
end;


// Гдк то в коде

var
  monster : tmonster;

....

  monster.OnStartAttack := MyAttackProcedure;


правка : очепятки )
Отредактировано: 01.06.09 12:44
#2
01.06.09 18:11
0
или проперти :)
Код
tMonster=class
    Fprop:TNotifyEvent;
public
     // какая то процедура которая вызывается при обновлении
     procedure Update()
published
     property OnStartAttack: TNotifyEvent read Fprop write Fprop;
end;

implementation

procedure tMonster.Update();
begin
  if ( какое то условие начала атаки) then begin
     if(Assigned(_on_loop)) then Fprop(Self);
  end;
end;

// Где то в коде
var
  monster:tmonster;
....
  monster.OnStartAttack := MyAttackProcedure;
#3
01.06.09 20:20
0
Еще есть такая вещь как Message.
http://www.freepascal.org/docs-html/ref/re...#x73-810006.3.5

Позволяет насоздавать методы вида
Код
procedure OnClickHandler(Var Msg); Message ’OnClick’;


А потом после вызова MyObject.Dispatch(Msg); - будет найдена и вызвана необходимая функция.
#4
03.06.09 00:01
0
DarkerTamaturg короче ты сам создаёшь свою систему евентов, которая никак несвязана с виндосовскими, аеслинадо то свзязываешь? Реализация не стольтрудна....хранишь колво объектов и какие объекты, один прыгает и создаёт сообщение с тем что он прыгнул, это сообщение через твоё ядро отправляется другим итп.
если хочешь пример такой системы то легко найти, к примеру двиг pHEngine или просто pH. если надо могу выложить его.
илимогу выложитьсвои нароботки)))или объяснить какделать)
Отредактировано: 03.06.09 00:01
#{{post.Index}}
{{post.Author.Login}}
{{post.CreatedDate | date:'dd.MM.yy HH:mm'}}
{{post.VotesRating}}
Отредактировано: {{post.UpdatedDate | date:'dd.MM.yy HH:mm'}}