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

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

Вернуться   Форум программистов > Работа для программиста > Фриланс
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2010, 00:17   #1
wint1000
Пользователь
 
Регистрация: 06.04.2010
Сообщений: 10
По умолчанию Шарики движутся рывками

У кого есть исходник, на подобие типового кода.
Написал такой код:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    Shape1: TShape;
    Timer1: TTimer;
    Shape2: TShape;
    Timer2: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Timer2Timer(Sender: TObject);
private
    { Private declarations }
public
  procedure krug();
  procedure mois();
  procedure krug2();
    { Public declarations }
end;

var
  Form1: TForm1;
  PosX,PosY,VelX,VelY:single;
  Pos2X,Pos2Y,Vel2X,Vel2Y:single;
  LastMouseX,LastMouseY:integer;
  MouseVelX,MouseVelY:integer;
  mousebutton:boolean;

implementation

{$R *.dfm}


procedure TForm1.FormCreate(Sender: TObject);
begin
 PosX:=3;
 PosY:=7;
 VelX:=2;
 VelY:=2;
 Pos2X:=2;
 Pos2Y:=6;
 Vel2X:=4;
 Vel2Y:=4;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
mousebutton:=true;
VelX:=0;
VelY:=0;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
mousebutton:=false;
VelX:=MouseVelX;
VelY:=MouseVelY;
end;

procedure TForm1.krug;
begin
 PosX:=PosX + VelX;
 PosY:=PosY + VelY;

 if PosX>ClientWidth-Shape1.Width then
 begin
  VelX:=-VelX;
 end
 else if PosX<0 then
     begin
       PosX:=0;
       VelX:=-VelX;
     end;

 if PosY>ClientHeight-Shape1.Width then
 begin
  VelY:=-VelY;
 end
 else if PosY<0 then
     begin
       PosY:=0;
       VelY:=-VelY;
     end;


 Shape1.Left:=Round(PosX);
 Shape1.Top:=Round(PosY);

end;

procedure TForm1.krug2;
begin
 Pos2X:=Pos2X+Vel2X;
 Pos2Y:=Pos2Y+Vel2Y;

 if Pos2X>ClientWidth-Shape2.Width then
 begin
   Vel2X:=-Vel2X;
 end
 else if Pos2X<0 then
      begin
        Pos2X:=0;
        Vel2X:=-Vel2X;
      end;
 if Pos2Y>ClientHeight-Shape2.Width then
 begin
   Vel2Y:=-Vel2Y;
 end
 else if Pos2Y<0 then
      begin
        Pos2Y:=0;
        Vel2Y:=-Vel2Y;
      end;

 Shape2.Left:=Round(Pos2X);
 Shape2.Top:=Round(Pos2Y);

end;

procedure TForm1.mois;
var
 mouseX,mouseY:integer;
begin
  mouseX:=Mouse.CursorPos.X-Form1.ClientOrigin.X;
  mouseY:=Mouse.CursorPos.Y-Form1.ClientOrigin.Y;

  MouseVelX:=mouseX-LastMouseX;
  MouseVelY:=mouseY-LastMouseY;

  LastMouseX:=mouseX;
  LastMouseY:=mouseY;



  if mousebutton=true then
  begin
    PosX:=MouseX-Shape1.Width/2;
    PosY:=MouseY-Shape1.Width/2;
  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 krug;
 mois;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
krug2;
end;

end.
Можно один или несколько шаров летают по форме. Я изменял настройки, ничего не помогает. Шары дёргаются. Кто пришлёт исходник - 500 деревянных. Подробности потом обговорим. Скиньте координаты.

Последний раз редактировалось wint1000; 28.11.2010 в 01:08.
wint1000 вне форума Ответить с цитированием
Старый 28.11.2010, 01:30   #2
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

скажи что тебе надо сделать - я сделаю! контакты в профиле!
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 28.11.2010, 02:50   #3
wint1000
Пользователь
 
Регистрация: 06.04.2010
Сообщений: 10
По умолчанию

Попробуй. Только не подумай, как два пальца стукнуть. Посмотри сюда
http://www.programmersforum.ru/showthread.php?t=124053
И реши получится или нет. Получится-флаг в руки (шли исходник), я посмотрю и переведу 300. Потом запрошу подробную роспись кода, что и как и зачем работает. Ещё 300. Естественно деньги вперёд(из-за особенностей темы) не получится.

Последний раз редактировалось wint1000; 28.11.2010 в 03:07.
wint1000 вне форума Ответить с цитированием
Старый 28.11.2010, 04:07   #4
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Не совсем пойму, чего Вы хотите.. Вот файл во вложении. Тут тоже дергается? Или нет?
Вложения
Тип файла: rar Fly.rar (184.6 Кб, 31 просмотров)
Black Fregat вне форума Ответить с цитированием
Старый 28.11.2010, 10:44   #5
AlexTuka
Новичок
Джуниор
 
Регистрация: 01.12.2008
Сообщений: 0
По умолчанию

Если я правильно понял, то нехватает буферизации изображения.
AlexTuka вне форума Ответить с цитированием
Старый 28.11.2010, 12:48   #6
wint1000
Пользователь
 
Регистрация: 06.04.2010
Сообщений: 10
По умолчанию

Если на Fly долго смотреть заболят глаза - обычное Дельфийское округление. Без него с вычислениями не справляется процессор. Я на ваш вопрос вопросом отвечу. А чем отличается это движение от Виндовской заставки шаров? Небо и земля. Этот вопрос -выше ссылка мы обсуждали, надо копать в графике. Гдето может FlexTuka прав насчёт буферизации. А видеокарта такие данные видно не обрабатывает(это визуальный факт!) т.е. если ей подают усечённые округлённые координаты, то она их и обрабатывает в точности с ними(ресурсов у неё ес-но хватит, но она не может искажать данные!) Здесь по ходу разобрались, нужно работать с графикой, а не с простенькой фигнёй. И изучать, как избежать округления. Я просто со станрартной компонентой решил поекспериментиравть (ставил другие типы данных в верибэл, но раз работа кода у нас последовательна, то любой тип там запарывается по скорости.) Наверно в графике чтото типа параллельного применено. Буфер-обработчик процедура. Только она будет то-же последовательна. Короче не знаю я принципа. У видеокарты всё получается, но как ей данные доставить? И ещё одна мысль - преобразование в видео формат. Может графика так и работает. Медленно вычисляя координаты, преобразует их просто в видеоформат (вспомним преобразование оболочки фильма в Nero -ооооочень медленное!). Там уже чисто под такие данные (развёртка) видокарта и заточена. Здесь наверно и собака зарыта.

Последний раз редактировалось wint1000; 28.11.2010 в 13:02.
wint1000 вне форума Ответить с цитированием
Старый 28.11.2010, 14:56   #7
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Что глаза заболят - так это от большого количества летающих объектов, специально делалось, чтобы показать, что Дельфи вполне справляется с просчетом графики, а не так, как тут писали.

Что Вам не нравится в движении объектов - я так и не понял. Но, судя по всему, на графике GDI нужного Вам качества просто не бывает. Если Вы хотите использовать возможности видеокарты, Вам надо копать DirectDraw.
Black Fregat вне форума Ответить с цитированием
Старый 28.11.2010, 16:33   #8
wint1000
Пользователь
 
Регистрация: 06.04.2010
Сообщений: 10
По умолчанию

О каком просчёте графики вы говорите, если там невозможно разглядеть ничего на движущейся картинке! Я вообще больше нихочу про неё говорить. На помойку такую работу! Вы что то если Выше читали, то давно уже пора понять, что надо копать графические движки. Если Вам нравится дёрганная анимация, то обратитесь в соответствующую ветку форума.
wint1000 вне форума Ответить с цитированием
Старый 28.11.2010, 16:59   #9
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

В этой теме http://www.programmersforum.ru/showthread.php?t=124053 Mihali4 привел Вам пример - ManySprite.rar. Это моя програмка и выложил я ее на форум, что бы показать, что обычными стандартными средствами Дельфи на канве можно создавать вполне приличную анимацию. В примере одновременно двигаются 6 спрайтов (персонажей), плюс динамический текст, плюс постоянная смена фонового рисунка (иначе не воспроизвести заход персонажей за деревья). Все это реализовано, повторюсь, стандартными средствами библиотеки Дельфи. Далее, эдесь не нужна видеокарта, встроеный видеоконтроллер на PIII вполне справляется с выводом на экран. Еще, да дельфийский таймер работает с минимальным интервалом 55 - 64 мсек. Это уже особенность "железа". Но его вполне достаточно для работы с графикой на канве (кто не разбирается - поясню. Человеческому глазу достаточно смены кадров с частотой 25 Гц. Так работало раньше все телевидение и кино проекторы. 25 Гц это соответствует длительности 40 мсек, так что это вполне удовлетворяет.) Просто при работе с канвой надо всю работу с графикой проделывать в памяти компьютера и только результат всех обработок выводить на экран. Это по сути и есть понятие буферизации графической работы. Еще раз напомню, речь идет о простй графике, использующей обычную смену рисунка (спрайтов) и простые приращения координат. При больших количествах спрайтов и текстур, использование рендеринга (а это уже OpenGL или
Direct X), выполнение сложных матаматических расчетов требует уже подключения процессора Видеокарты и другие принципы построения графики. Но это уже другая песня.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 28.11.2010, 17:29   #10
wint1000
Пользователь
 
Регистрация: 06.04.2010
Сообщений: 10
По умолчанию

Понял. Но всё это слова. Мне нужна работа. Хоть там рендеринг хоть OpenGL хоть что ещё! Дак вот требуется запустить шарик(и) или любой объект(ы) который не дёргается как мандражка, а летает как и нормальный объект. Видите всё просто. Об оплате выше сказанно. Поддёргивающие объекты можно оставить себе и меня ими не грузить. Успехов.
wint1000 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шарики движутся рывками wint1000 Общие вопросы Delphi 9 28.11.2010 22:21
Шарики sk1p Общие вопросы C/C++ 1 06.04.2010 01:11
С++ Лабораторная работа: игра "Шарики" bondik Фриланс 1 23.12.2009 23:53