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

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

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2010, 16:41   #1
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию Delphi: движение маркера по игровому полю

Делаю в Delphi "Морской бой" из игрового автомата . Есть маркер - пуля, которая, в случае нажатия игроком клавиши "пробел" должна начать движение со стартовой позиции до определенного предела. Описываю движение в цикле, но он выдает ошибки. Я не знаю, как их исправить - помогите!
Вот код:
Код:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);

  begin
if key=32 then // запуск маркера пробелом
 //создаем счетчик для движения маркера
 begin

  i:=marker.Top; //переменной присваиваем начальное значение,
  //совпадаюшее с верхом маркера
    for i:=0 to -200 // маркер должен начать движение с начальной позиции
    // до определенного придела
      do
        begin
          i:=i-1;//шаг иттерации - маркер движется вверх
        end;



  end;

end.
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 30.01.2010, 17:21   #2
Fuadik
Пользователь
 
Регистрация: 22.01.2010
Сообщений: 37
По умолчанию

В цикле for i:=0 to -200 должно быть i:=0 downto -200 do и желательно писать dec(i) вместо i:=i-1
Fuadik вне форума Ответить с цитированием
Старый 30.01.2010, 17:26   #3
crystalbit
ГОСТ 2.403-75
Пользователь
 
Аватар для crystalbit
 
Регистрация: 04.05.2009
Сообщений: 92
По умолчанию

плюс ты в цикле модифицируешь переменную цикла
может, ты хотел написать marker.Top:=marker.Top+1?
да и паузы не мешали бы хоть какие
мой скромный delphi блог
crystalbit вне форума Ответить с цитированием
Старый 30.01.2010, 17:34   #4
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Ага, спасибо, буду пробовать))

Если что - снова к Вам))


P.S. если я напишу marker.Top:=marker.Top+1 он будет двигаться вниз, а мне-то нужно вверх)))
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 30.01.2010, 17:47   #5
crystalbit
ГОСТ 2.403-75
Пользователь
 
Аватар для crystalbit
 
Регистрация: 04.05.2009
Сообщений: 92
По умолчанию

-1, да, опечатался
я имел в виду то, что надо менять не i, а marker.Top
мой скромный delphi блог
crystalbit вне форума Ответить с цитированием
Старый 30.01.2010, 18:59   #6
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Я все поменяла, а он все равно пишет Assigment to FOR-Loop variable 'i'((((
Сейчас получается следующий код:
Код:
var
  Form1: TForm1;
   i:integer;

implementation

{$R *.dfm}

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);

  begin
if key=32 then 
 begin

  i:=marker.Top; 
    for i:=0 downto -200 
      do
        begin
          dec(i);
        end;



  end;

end.
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 30.01.2010, 19:02   #7
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
for i:=0 downto -200
do
begin
dec(i);
end;
НИКОГДА! Слышите? НИКОГДА! Не трогайте переменную, которая сейчас в цикле!
Код:
Dec(Marker.Top)
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 30.01.2010, 19:04   #8
crystalbit
ГОСТ 2.403-75
Пользователь
 
Аватар для crystalbit
 
Регистрация: 04.05.2009
Сообщений: 92
По умолчанию

зачем в цикле for менять переменную i? цикл for сам меняет её от 0 до -200
Код:
    for i:=0 downto -200 
      do
        begin
          marker.Top:=marker.Top-1;
        end;
вероятно так?
мой скромный delphi блог
crystalbit вне форума Ответить с цитированием
Старый 30.01.2010, 19:13   #9
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Спасибо)))Я не волшебник, а только учусь))
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 30.01.2010, 19:45   #10
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Сделала)) Только я нажимаю на пробел, а он - маркер - как прыгнет! А задумка была, чтобы маркер двигался по полю не такими тигриными прыжками, а совершал движение как трассирующая пуля. Цикл нужен для того, чтобы пользователь не жал постоянно на пробел, чтобы двигать маркер, а было так - пробел нажат, маркер стартанул, и пока не дойдет до определенной границы его движение продолжалось. Нужно думать какой-нибудь while.
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск текста от маркера до маркера artemavd Общие вопросы Delphi 13 07.04.2010 12:37
Захват маркера на видео Liam Помощь студентам 0 03.07.2009 03:52
Движение 2-x объектов (Delphi) VadEr Помощь студентам 2 06.06.2009 17:19
Броуновское движение (Delphi) ExoByte Помощь студентам 9 01.06.2009 11:25
Движение рисунка(Delphi) 2009 Помощь студентам 6 12.03.2009 22:17