Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.12.11;
Скачать: [xml.tar.bz2];

Вниз

как правильно обратиться к полю?   Найти похожие ветки 

 
brother_home   (2011-08-29 09:55) [0]

Приветствую!
есть:
 TPlayer = record
   No: byte;
   Name: string;
   ...
 end;

TM = class(TObject)
 private
   FActivePlayer: byte;
   ...
   function GetActivePlayer: TPlayer;
  ...
 public
   ...
   Player: array [1..MaxPlayers] of TPlayer;
   ...
   property ActivePlayer: TPlayer read GetActivePlayer write ???
   ...
 end;

function TM.GetActivePlayer: TPlayer;
begin
 if FActivePlayer in [1..6] then
   result:= Player[FActivePlayer]
 else
   result:= PlayerNull;
end;

данная конструкция позволяет только читать поля активного игрока,
а как реализовать запись, например:
ActivePlayer.Name = "Игрок1";
пока пишу так:
if FActivePlayer in [1..6] then Player[FActivePlayer].Name = "Игрок1";


 
brother_home   (2011-08-29 10:15) [1]

может ссылку?


 
Медвежонок Пятачок ©   (2011-08-29 10:32) [2]

гетактивплеер.нэйм = "";


 
Медвежонок Пятачок ©   (2011-08-29 10:35) [3]

ну и проверить что оно не плеернул


 
brother_home   (2011-08-29 11:13) [4]


> гетактивплеер.нэйм = "";

так write не описан, значит будет тока реад онли...


 
Медвежонок Пятачок ©   (2011-08-29 11:19) [5]

с дерева упал?


 
Медвежонок Пятачок ©   (2011-08-29 11:22) [6]

райт не прописан гетактивплееру.
но мы-то меняем не активплеера а его нэйм, уже имея в руках самого TPlayer


 
Медвежонок Пятачок ©   (2011-08-29 11:26) [7]

И при присвоении значений возвращенному рекорду, код твоего дурацкого TM = class(TObject)
уже никаким боком не участвует.


 
Медвежонок Пятачок ©   (2011-08-29 11:27) [8]

... присвоении значений полям рекорда конечно.


 
brother_home   (2011-08-29 11:27) [9]


> гетактивплеер.нэйм = "";

ошибка: Left side cannot assigned to


 
brother_home   (2011-08-29 11:30) [10]

я вопрос не зря задал...


 
Медвежонок Пятачок ©   (2011-08-29 11:31) [11]

Ты не свойству присваивай.


 
brother_home   (2011-08-29 11:33) [12]

а к чему присваивать? можно подробнее?


 
Медвежонок Пятачок ©   (2011-08-29 11:36) [13]

PPlayer = ^TPlayer;
...
function GetActivePlayer: PPlayer;
...

p := TM.Create;
p.GetActivePlayer.Name := "Dunduk";


 
brother_home   (2011-08-29 11:42) [14]

спасибо переделал, так правильно?:
   property ActivePlayer: PPlayer read GetActivePlayer;
...
function TManager.GetActivePlayer: PPlayer;
begin
 if FActivePlayer in [1..6] then
   result:= @Player[FActivePlayer]
 else
   result:= @PlayerNull;
end;


 
brother_home   (2011-08-29 11:43) [15]

только я так и не понял, почему когда функция GetActivePlayer возвращает сам объект, то ошибка, а если указатель, то все норм?


 
И. Павел ©   (2011-08-29 11:47) [16]

Если разделить получение GetActivePlayer от изменения Name - компилятор не заметит подвоха :)
procedure TForm1.Button1Click(Sender: TObject);
var player: TPlayer;
   OTM: TM;
begin
 ...
 player := OTM.GetActivePlayer;
 player.Name := "";
end;


 
Медвежонок Пятачок ©   (2011-08-29 11:47) [17]

Потому что рекорд это не объект.
И при геетактивплеер : TPlayer приходит копия рекорда.
И какой смысл присваивать ее полям что-то, если они дальше этой копии не уйдут и более того, сама копия умрет при выходе из зоны видимости.


 
Медвежонок Пятачок ©   (2011-08-29 11:49) [18]

procedure TForm1.Button1Click(Sender: TObject);
var player: TPlayer;
  OTM: TM;
begin
...
player := OTM.GetActivePlayer;
player.Name := "";
end;


смотри выше.
все твои изменения будут жить недолго да еще и не там где ты хочешь.


 
brother_home   (2011-08-29 11:58) [19]


> И при геетактивплеер : TPlayer приходит копия рекорда.
> И какой смысл присваивать ее полям что-то, если они дальше
> этой копии не уйдут и более того, сама копия умрет при выходе
> из зоны видимости.

это я понял те по ссылке мы получаем не копию а как бы сам объект и тогда все гуд?


 
И. Павел ©   (2011-08-29 12:04) [20]

> это я понял те по ссылке мы получаем не копию а как бы сам
> объект и тогда все гуд?

Адрес получаем, и работаем с объектом по этому адресу. И тогда все гуд.


 
brother_home   (2011-08-29 12:08) [21]

спасибо всем!


 
Anatoly Podgoretsky ©   (2011-08-29 12:09) [22]


> Ты не свойству присваивай.

Можно и свойству, но его надо иметь.



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

Форум: "Начинающим";
Текущий архив: 2011.12.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.004 c
4-1252106846
demon
2009-09-05 03:27
2011.12.11
Как обработать нажатие на кнопку минимизации?


8-1217964911
Рацелий
2008-08-05 23:35
2011.12.11
Chip music


15-1313667310
Кто б сомневался
2011-08-18 15:35
2011.12.11
А на каких языках пишуться высокоресурсные 3D игры?


2-1314259058
slay64
2011-08-25 11:57
2011.12.11
Поток и БД


2-1314685531
Patrick1968
2011-08-30 10:25
2011.12.11
Проверка состояния сервиса Windows





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский