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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2009, 18:32   #1
GaLiof
Пользователь
 
Регистрация: 20.03.2009
Сообщений: 52
Восклицание Stack overflow

Здравствуйте. Сейчас пишу игру под DelphiX. И сегодня наткнулся на проблему. Когда ставлю много движущихся объестов вылазит ошибка:
Project Project1.exe raesed exception class EStackOverflow with message. И просит перезагрузить delphi7...Ктонить знает как исправить эту ошибку?
GaLiof вне форума Ответить с цитированием
Старый 12.12.2009, 02:19   #2
Alex_FF
Удален
Форумчанин
 
Регистрация: 02.12.2009
Сообщений: 309
По умолчанию

попробуй стек увеличить через директиву {$M min, max} или {$MAXSTACKSIZE max},
где min, max - размер в байтах.
Alex_FF вне форума Ответить с цитированием
Старый 12.12.2009, 05:56   #3
GaLiof
Пользователь
 
Регистрация: 20.03.2009
Сообщений: 52
По умолчанию

а где это надо прописывать? и как можно посмотреть какой максимальный размер стека у меня на данный момент?
GaLiof вне форума Ответить с цитированием
Старый 12.12.2009, 11:06   #4
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

PROJECT OPTIONS LINKER STACKSIZE там же можно править размер.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 12.12.2009, 11:46   #5
GaLiof
Пользователь
 
Регистрация: 20.03.2009
Сообщений: 52
По умолчанию

Теперь другая проблема)) Во время выключения( В моём случае столкновения объектов) вылазит ошибка:
Project Project1.exe raesed exception class EListError with message 'List index out of bounds(17)'.Process stopped.
А с эти ктонить знает как бороться?
GaLiof вне форума Ответить с цитированием
Старый 12.12.2009, 11:58   #6
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Обращаешься к элементу массива, которого не существует. Либо вышел за пределы массива либо к несозданному. Например делаешь BitMap.Free, которому не сделал BitMap := TBitMap.Create;
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 12.12.2009, 12:21   #7
GaLiof
Пользователь
 
Регистрация: 20.03.2009
Сообщений: 52
По умолчанию

Код:
unit Unit1;
{$MAXSTACKSIZE 1048576}
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DXClass, DXSprite, DXInput, DXDraws, ExtCtrls;

type
  TForm1 = class(TDXForm)
    DXDraw1: TDXDraw;
    DXImageList1: TDXImageList;
    DXInput1: TDXInput;
    DXSpriteEngine1: TDXSpriteEngine;
    DXTimer1: TDXTimer;
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure DXTimer1Timer(Sender: TObject; LagCount: Integer);

    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

type
TAsteroid=class(TimageSprite)
Protected
procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
procedure DoMove(MoveCount:integer);override;
Public
constructor Create(AParent: TSprite); override;
destructor Destroy; override;
end;

TNLO=class(TimageSprite)
Protected
procedure DoMove(MoveCount:integer);override;
procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
Public
destructor Destroy; override;
end;

 procedure TForm1.FormCreate(Sender: TObject);
begin
with Tnlo.Create(Dxspriteengine1.Engine) do
begin
 PixelCheck := True;            // для столкновения просчитывает каждую точку
  Image := form1.dxImageList1.Items.Find('NLO'); //ищем спрайт в ImageList`е
  x:=80; // x координаты
  y:=10;  // y координаты
  Width := 20;          //ширина равна ширине спрайта
  Height := 49;        //высота равна высоте спрайта
  end;
end;


{ TNLO }

destructor TNLO.Destroy;
begin
   inherited
   destroy;
end;

procedure TNLO.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
  inherited;
if sprite is Tasteroid then dead;
collision;

end;

procedure TNLO.DoMove(MoveCount: integer);
begin
  inherited;
if isLeft in Form1.DXInput1.States then x:=x-5;
if isRight in Form1.DXInput1.States then x:=x+5;
if isUp in Form1.DXInput1.States then y:=y-5;
if isDown in Form1.DXInput1.States then y:=y+5;
collision;
 if  y >= form1.DXDraw1.SurfaceHeight-image.Height then  //непускаем
      y := form1.DXDraw1.SurfaceHeight-image.Height;               //объект
      if  x >= form1.DXDraw1.SurfaceWidth -image.Width+5  then  //за границы
      x := form1.DXDraw1.SurfaceWidth -image.Width;                 // формы
      if  y <= 0 then
      y := 1;
      if  x <= 0 then
      x:=3;
 collision;
end;

procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
if not DXDraw1.CanDraw then exit; // Если нет DirectX выходим
  DXInput1.Update;
  DXSpriteEngine1.Move(LagCount);
  DXSpriteEngine1.Dead;
  DXDraw1.Surface.Fill(0);
  DXSpriteEngine1.Draw;
  DXDraw1.Flip;

end;

 { TAsteroid }

constructor TAsteroid.Create(AParent: TSprite);
begin
  inherited;
  PixelCheck := True;            // для столкновения просчитывает каждую точку
  Image := form1.dxImageList1.Items.Find('asteroid'); //ищем спрайт в ImageList`е
  x:=100; // x координаты
  y:=100;  // y координаты
  Width := 100;          //ширина равна ширине спрайта
  Height := 100;        //высота равна высоте спрайта
end;

destructor TAsteroid.Destroy;
begin
  inherited
  Destroy;
end;

procedure TAsteroid.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
   if sprite is  TNLO then dead;
   if sprite is TNlO then
   showmessage('Вы проиграли');
   application.Terminate;
    Collision;
end;




procedure TAsteroid.DoMove(MoveCount: integer);
begin
  inherited Domove(Movecount);
  X:=x-2;

  Collision;
If X=0 then dead;

end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
with TAsteroid.Create(Dxspriteengine1.Engine) do
begin
 PixelCheck := True;            // для столкновения просчитывает каждую точку
  Image := form1.dxImageList1.Items.Find('asteroid'); //ищем спрайт в ImageList`е
  x:=700; // x координаты
  y:=50;  // y координаты
  Width := Image.Width;          //ширина равна ширине спрайта
  Height := Image.Height;        //высота равна высоте спрайта
 begin
with TAsteroid.Create(Dxspriteengine1.Engine) do
begin
 PixelCheck := True;            // для столкновения просчитывает каждую точку
  Image := form1.dxImageList1.Items.Find('asteroid'); //ищем спрайт в ImageList`е
  x:=700; // x координаты
  y:=200;  // y координаты
  Width := Image.Width;          //ширина равна ширине спрайта
  Height := Image.Height;
   begin
with TAsteroid.Create(Dxspriteengine1.Engine) do
begin
 PixelCheck := True;            // для столкновения просчитывает каждую точку
  Image := form1.dxImageList1.Items.Find('asteroid'); //ищем спрайт в ImageList`е
  x:=700; // x координаты
  y:=350;  // y координаты
  Width := Image.Width;          //ширина равна ширине спрайта
  Height := Image.Height;
  end;
end;
end;end; end;end;
end.
где ошибка??
GaLiof вне форума Ответить с цитированием
Старый 12.12.2009, 12:56   #8
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

A F7 слабо заюзать и пройтись?Или бряки поставить?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переполнение стека (Stack overflow) zotox Помощь студентам 4 13.09.2009 03:16
Stack Overflow Neeter БД в Delphi 2 03.06.2009 00:39
Stack Overflow при сохранении Shouldercannon Общие вопросы Delphi 1 20.05.2009 11:46
Stack OverFlow Tanya2008 Общие вопросы Delphi 6 11.05.2009 15:16
Stack Overflow??? Рустам Общие вопросы Delphi 7 01.04.2008 17:24