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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2008, 15:01   #11
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Еще одно уточнение. Mas[i,j].IndexAttach скорее всего должен будет хранить номер группы кусочков, что уже присоединены друг к другу, т.к. в процессе игры никто не запрещает соединять сразу на несколько небольших фрагментов, а после все в один большой. Вам нужно будет сделать счетчик групп NGroup: Word;, ...т.е. при присоединении кусочка к другому, нужно проверить Mas[i,j].IndexAttach первого, если он равен нулю, то присвоить последнему Mas[i,j].IndexAttach:=NGroup+1; , в противном случае просто переписать номер с первого во второй.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 02.04.2008, 15:22   #12
Пальмира
Пользователь
 
Аватар для Пальмира
 
Регистрация: 01.04.2008
Сообщений: 10
По умолчанию

Цитата:
Mas[i,j].IndexAttach скорее всего должен будет хранить номер группы кусочков, что уже присоединены друг к другу, т.к. в процессе игры никто не запрещает соединять сразу на несколько небольших фрагментов, а после все в один большой
Ага, я уже думала над этим, только реализовать хотела несколько иначе.
Однако, этот способ куда лучше - проверок придется делать гораздо меньше
Пальмира вне форума Ответить с цитированием
Старый 03.04.2008, 18:07   #13
Пальмира
Пользователь
 
Аватар для Пальмира
 
Регистрация: 01.04.2008
Сообщений: 10
По умолчанию

Научилась приклеивать кусочки, но встала проблема с перемещением группы кусочков. На данный момент код для перемещения такой:

Код:
procedure TMyImage.MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var i,j:integer;
begin

If Drag Then
begin //Если флажок установлен, т.е. нажата левая копка мыши

   if self.IndexAtt <> 0 then
   begin
   (Sender As TImage).Left:=(Sender As TImage).Left + X -X0;
   (Sender As TImage).Top:=(Sender As TImage).Top + Y - Y0 ;
        for i:= 1 to 4 do
          for j:=1 to 4 do
          begin
               if puz[i][j].IndexAtt=self.IndexAtt then
                  begin
                        puz[i][j].Left:=puz[i][j].Left + X -X0;
                        puz[i][j].Top:=puz[i][j].Top + Y - Y0 ;
                  end;
          end;
   end
   else
   begin
      (Sender As TImage).Left:=(Sender As TImage).Left + X -X0;
      (Sender As TImage).Top:=(Sender As TImage).Top + Y - Y0 ;
   end;
end;

end;
Однако при этом перемещаются только два кусочка из группы, да и то как то странно перемещаются - кому интересно - прилагаю файл exe. Картинки грузить только *.bmp
Вложения
Тип файла: rar Puzzle.rar (191.1 Кб, 54 просмотров)
Пальмира вне форума Ответить с цитированием
Старый 03.04.2008, 21:56   #14
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию Будем разбираться...

Если я правильно понимаю, поправите если что, (Sender As TImage) - это тот ваш кусочек, что был подцеплен мышкой и перемещается, т.е. координаты Вы ему уже меняете первыми строками:

Код:
  if self.IndexAtt <> 0 then  
    begin

    // вот изменение положения  
    (Sender As TImage).Left:=(Sender As TImage).Left + X -X0;  
    (Sender As TImage).Top:=(Sender As TImage).Top + Y - Y0 ;
... затем, в цикле Вы перебираете все без исключения кусочки, в которые опять же попадает уже перемещаемый, ведь у него индекс группы тот же.

Код:
         for i:= 1 to 4 do  
           for j:=1 to 4 do  
           begin
                // условие нужно доработать, т.е. проверять только неактивные кусочки  
                if puz[i][j].IndexAtt=self.IndexAtt then  
                   begin  
                         puz[i][j].Left:=puz[i][j].Left + X -X0;  
                         puz[i][j].Top:=puz[i][j].Top + Y - Y0 ;  
                   end;  
           end;
Вот и выходит, что движение одного в два раза быстрее другого.
Хотелось бы взглянуть на счетчик групп в OnMouseUp, очевидно там ошибка счета, если привязать можно только два кусочка.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 03.04.2008, 21:59   #15
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
Лампочка

Полезная информация:
Нажата ли левая кнопка можно узнать из переменной Shift: TShiftState
if Shift = [ssLeft] then...

p.s. у меня получилось и больше двух подвигать, если это дерганье можно так назвать
Повнимательней с координатами и с образованием структуры из кусочков. В принципе начало есть, нужно только доработать. Еще желательно чтобы тот кусочек к-рый двигают был сверху других.

Как насчет такой пазл сделать? Кстати посмотрите кто автор.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 03.04.2008 в 23:11.
mutabor вне форума Ответить с цитированием
Старый 06.04.2008, 18:11   #16
Пальмира
Пользователь
 
Аватар для Пальмира
 
Регистрация: 01.04.2008
Сообщений: 10
По умолчанию

Beermonza , Большое спасибо! После исправления этой ошибки все чудесным образом заработало

mutabor

Цитата:
Как насчет такой пазл сделать? Кстати посмотрите кто автор.
да я бы и непротив сделать что-то наподобие, но время сдачи курсовой работы поджимает Возможно потом ради собственного интереса буду доделывать, доводить до ума и т.д.
Пальмира вне форума Ответить с цитированием
Старый 06.04.2008, 22:55   #17
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

я для перемещения группы графических объектов создавал специальный Image для перемещения, на котором при начале рисования все эти объекты на Canvas перерисовывал и этот имадж уже таскал, а сами перетаскиваемые объекты соответственно ныкал. Тут правда будет уже трудность с определением че куда прилепить нужно будет при отпускании мыши
pu4koff вне форума Ответить с цитированием
Старый 07.04.2008, 16:18   #18
Пальмира
Пользователь
 
Аватар для Пальмира
 
Регистрация: 01.04.2008
Сообщений: 10
По умолчанию

ну группки-то у меня двигаются теперь и без дополнительного Image. Сейчас другая загвоздка - с прилеплением куска к группе.
Он липнет только в том случае, если группу "таскать" по форме за соседний с ним кусок. В принципе уже поняла, как нужно, но голова сломалась - и никак не могу оформить эту мысль в код - все неувязочка какая-то выходит Поэтому отдохну пару деньков - и снова в бой. Может и придумаю чего...
Пальмира вне форума Ответить с цитированием
Старый 07.04.2008, 17:09   #19
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Покажите часть кода на счетчик групп (это у OnMouseUp должно быть), ...возможно у Вас номер группы переназначается при каждом перемещении одного из связных кусочков.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 07.04.2008, 20:23   #20
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Пальмира, выкладывайте весь код (в архиве), уже давно вам всё поправили и наладили бы.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Ответ


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