Модераторы: Rickert
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание игровых обьектов, Реакция игровых обьектов  
:(
    Опции темы
lordgabriel
  Дата 15.8.2008, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.4.2008

Репутация: нет
Всего: нет



Нужна помощь.  smile 
Как создать несколько обьектов. ?
1. Мне надо создать  несколько яблок.
2. При нажатии на любое яблоко оно исчезает.
3. Через некоторое время появляются опять яблоки.

Исходник и модули  здесь (архив 1.5 mb)
http://depositfiles.com/files/7248343


Вот код главной программы.
Код


program Garden;

uses
  windows,
  OpenGL,
  fge_core in 'engine\fge_core.pas',
  fge_sys in 'engine\fge_sys.pas',
  fge_scn in 'engine\fge_scn.pas',
  fge_log in 'engine\fge_log.pas',
  fge_cfg in 'engine\fge_cfg.pas',
  fge_inp in 'engine\fge_inp.pas',
  fge_tex in 'engine\fge_tex.pas',
  fge_spt in 'engine\fge_spt.pas',
  fge_prt in 'engine\fge_prt.pas',
  DEMusicFiles in 'DEMusicFiles.pas',
  fge_colis in 'engine\fge_colis.pas';



const
  ProductName = 'Garden';
  ProductVersion = '0.1';

  // Состояния приложения
  AppInit = 0;
  AppMenu = 1;
  AppGame = 2;

type
  TApple = record
    x,y: integer;
    colis: Boolean;
  end;

var
  AppState : integer;
  MouseImage,TestObj: uint;
  oy: integer;


Procedure CreateApples;
var
 i : integer;
begin
  for i := 0 to 10 do
  begin
    fge.spt.Draw(random(500),Random(500),30,30,0,TestObj);
  end;
end;


////////////////////////////////////////////////////////////////////////////////
/// Главная процедура инициализации приложения
////////////////////////////////////////////////////////////////////////////////
procedure Init;
begin
  FGE.BuildFont('Courier New', 0, 32, FW_BOLD, FGE.h_DC); // Создать шрифт
  fge.tex.LoadTexture('Apple.tga', TestObj, false,2);
  fge.tex.LoadTexture('mouse.tga', MouseImage, false,2);

end;



procedure Mouse;
begin
  glcolor3ub(255,255,255);
  // расчитываем координаты по Y
  oY := fge.inp.Y;
  oY := 1024-oY-65;   // Формула:  oY = ширина екрана - oY - высота спрайта
  fge.spt.DrawMouse(fge.inp.x,oY,25,25,-25,MouseImage);
end;


////////////////////////////////////////////////////////////////////////////////
/// Главная процедура рендеринга приложения
////////////////////////////////////////////////////////////////////////////////
procedure Render;
begin
  fge.scn.SceneColor(1,1,1);      // заливка фона
  fge.scn.NewScene;               // создать сцену

  CreateApples;

  mouse;
end;

////////////////////////////////////////////////////////////////////////////////
/// Главная процедура обновлений приложения
////////////////////////////////////////////////////////////////////////////////
procedure Update;
begin
  // если нажата клавиша escape тогда завершается работа приложения
  if fge.inp.Keys[key_escape] then  begin
    fge.Quit;
  end;

end;

begin
  InitEngine;                                                    // Инициализировать движок FANSORO
  FGE.SetProc(PROC_INIT, @INIT);                                 // Установить процесс инициализации
  FGE.CreateAPP(ProductName + ' ' + ProductVersion,1024,768);    // Создать приложение с задаными параметрами
  FGE.SetProc(PROC_RENDER, @RENDER);                             // Установить процесс рендеринга
  FGE.SetProc(PROC_UPDATE, @UPDATE);                             // Установить процесс обновлений
  FGE.Loop(1000);                                                // Запустить таймер движка FANSORO
end.


PM MAIL   Вверх
arilou
Дата 15.8.2008, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 6
Всего: 61



lordgabriel, у тебя ничего не получится пока ты не представишь яблоко в виде класса. 

В синтаксисе Дельфи не силен, поэтому вот:

Код

class Apple
{
   public int X;
   public int Y;

   public Color Color;
   static public Apple CreateRandom(int maxx, int maxy);
   bool IsVisible;
}

class App
{
   List<Apple> apples = new List<Apple>();

   void Main()
   {
      for(int i=0; i<10; i++)
         apples.Add(Apple.CreateRandom(500, 500));
   }
}


А дальше все просто:

1) Перехватываешь mouse click
2) Проверяешь в своем списке, есть ли яблоко в указаных координатах (учитывая что у яблока есть размер)
3) Если есть - ставишь ему IsVisible = !IsVisible
4) И говоришь своему циклу отрисовки, что надо бы перерисовать все яблоки (невидимые рисоваться не должны)

ЗЫ. Я специально утрировал, но направление, в котором надо копать - верное.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
lordgabriel
Дата 15.8.2008, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.4.2008

Репутация: нет
Всего: нет



arilou

а рисоваться оно будет постояно ?

Вот я делал так

  for i := 0 to 10 do
  begin
    fge.spt.Draw(random(500),Random(500),30,30,0,TestObj);
  end;

так оно постояно перерисовуется на новом месте каждую секунду.



PM MAIL   Вверх
lordgabriel
Дата 15.8.2008, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.4.2008

Репутация: нет
Всего: нет



Написал код .
 Неработает smile 


Код


program Garden;

uses
  windows,
  OpenGL,
  fge_core in 'engine\fge_core.pas',
  fge_sys in 'engine\fge_sys.pas',
  fge_scn in 'engine\fge_scn.pas',
  fge_log in 'engine\fge_log.pas',
  fge_cfg in 'engine\fge_cfg.pas',
  fge_inp in 'engine\fge_inp.pas',
  fge_tex in 'engine\fge_tex.pas',
  fge_spt in 'engine\fge_spt.pas',
  fge_prt in 'engine\fge_prt.pas',
  DEMusicFiles in 'DEMusicFiles.pas',
  fge_colis in 'engine\fge_colis.pas';



const
  ProductName = 'Garden';
  ProductVersion = '0.1';

  // Состояния приложения
  AppInit = 0;
  AppMenu = 1;
  AppGame = 2;

type
  TApple = packed record
    x,y: integer;
    active: Boolean;
  end;

var
  AppState : integer;
  MouseImage,TestObj: uint;
  oy: integer;
  apple:array of TApple;




////////////////////////////////////////////////////////////////////////////////
/// Главная процедура инициализации приложения
////////////////////////////////////////////////////////////////////////////////
procedure Init;
begin
  FGE.BuildFont('Courier New', 0, 32, FW_BOLD, FGE.h_DC); // Создать шрифт
  fge.tex.LoadTexture('Apple.tga', TestObj, false,2);
  fge.tex.LoadTexture('mouse.tga', MouseImage, false,2);



end;

Procedure CreateApples(x,y:integer);
var
 i : integer;
begin

 for i:=0 to 100 do
 begin
    apple[i].Active:=true;
    apple[i].X:=X;
    apple[i].Y:=Y;
 end;


 for i:=0 to 100 do
  if apple[i].Active then
  begin
     apple[i].x:=0;
     apple[i].y:=0;
     apple[i].active:=false;
     fge.spt.Draw(apple[i].x,apple[i].y,25,25,-25,MouseImage);
  end;
end;

procedure Mouse;
begin
  glcolor3ub(255,255,255);
  // расчитываем координаты по Y
  oY := fge.inp.Y;
  oY := 1024-oY-65;   // Формула:  oY = ширина екрана - oY - высота спрайта
  fge.spt.DrawMouse(fge.inp.x,oY,25,25,-25,MouseImage);
end;


////////////////////////////////////////////////////////////////////////////////
/// Главная процедура рендеринга приложения
////////////////////////////////////////////////////////////////////////////////
procedure Render;
begin
  fge.scn.SceneColor(1,1,1);      // заливка фона
  fge.scn.NewScene;               // создать сцену

  CreateApples(random(500),random(500));

  mouse;
end;

////////////////////////////////////////////////////////////////////////////////
/// Главная процедура обновлений приложения
////////////////////////////////////////////////////////////////////////////////
procedure Update;
begin
  // если нажата клавиша escape тогда завершается работа приложения
  if fge.inp.Keys[key_escape] then  begin
    fge.Quit;
  end;

end;

begin
  InitEngine;                                                    // Инициализировать движок FANSORO
  FGE.SetProc(PROC_INIT, @INIT);                                 // Установить процесс инициализации
  FGE.CreateAPP(ProductName + ' ' + ProductVersion,1024,768);    // Создать приложение с задаными параметрами
  FGE.SetProc(PROC_RENDER, @RENDER);                             // Установить процесс рендеринга
  FGE.SetProc(PROC_UPDATE, @UPDATE);                             // Установить процесс обновлений
  FGE.Loop(1000);                                                // Запустить таймер движка FANSORO
end.



Добавлено через 1 минуту и 39 секунд
Выскакивает такая ошибка .

Excaption EAccessViolation in  module Garden.exe
PM MAIL   Вверх
Kakadu
Дата 16.8.2008, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 19.3.2008

Репутация: нет
Всего: 7



Код

var apple:array of TApple;

А так можно писать? Кажется надо четкое число яблок вбивать, а конструкция array of используется в описании заголовков функций, где с индексацией работаят через функции Low(массив) и High(массив).


--------------------
Добрые мариносы долго кормили украдкой маленьких зерлингов. От этой украдки зерлинги пухли и дохли
PM MAIL   Вверх
lordgabriel
Дата 16.8.2008, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.4.2008

Репутация: нет
Всего: нет



что если єто переаисать
var apple:array of TApple;
на
var apple:array[1..40] of TApple;
то что заработатет
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема »


 




[ Время генерации скрипта: 0.0754 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.