Аватар для nnnikotinnn995
7 / 7 / 4
Регистрация: 07.07.2011
Сообщений: 583

Mortal Kombat - первые шаги

09.08.2011, 21:18. Показов 9122. Ответов 52
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. вот решил попробовать написать игру типа Mortal Kombat
и заодно выяснить, можно ли с помощью стандартной библиотеки сделать что то стоящее (хотя бы такого качества http://flash-online-games.ru/s... /6-1-0-263) или лучше использовать какую ни будь другую библиотеку (или вообще использовать какой ни будь движок). На скорую руку набросал в максе пнг , потому претензии по графики не принимаю, сначала надо качественное управление сделать, а потом рисовать.
У меня в проекте 2 имиджа три таймера. Прежде всего мне не понятно почему движения (особенно прыжки – функция int y=-155*sin(t/2)+115) такие дерганные? Посоветуйте пожалуйста, как сделать их более плавными?
В 10 МВ мне не удалось все впихнуть все файлы, поэтому перенесите пожалуйста содержимое папки Debug2 в папку Debug (Projects\ Debug).
Вложения
Тип файла: 7z Projects.7z (6.56 Мб, 88 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.08.2011, 21:18
Ответы с готовыми решениями:

Первые шаги...
Скачал себе Borland C++ builder В учебники первая задача создать файл first.cpp Записать в нем следующее: #include...

Первые шаги при получении source code
Здравствуйте уважаемые форумчане, Какие первые шаги разработчика (инженера) программного обеспечения при получении прогрманого кода? ...

Mortal Kombat
Предлагаю обсудить всем известную вселенную МК, а точнее фильм который выйдет в 2013 году...и сериал который уже снимается и потихоньку...

52
 Аватар для nnnikotinnn995
7 / 7 / 4
Регистрация: 07.07.2011
Сообщений: 583
22.08.2011, 20:07  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от NiTan Посмотреть сообщение
nnnikotinnn995, а зачем перемещать достаточно большое изображение? Маленькие не нравятся? Так можно растягивать...
Ну хочется качественного изображения со всеми пикселями, а как можно растягивать?
0
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
22.08.2011, 20:27
nnnikotinnn995, ну Вы же не создаете сверхреалистичную графику. Как я понял, создается нечто простое.

Добавлено через 3 минуты
Цитата Сообщение от nnnikotinnn995 Посмотреть сообщение
Ну хочется качественного изображения со всеми пикселями
В таком случае, думаю, нужно использовать какие-нибудь сторонние библиотеки, специально преднзначенные для этого.

Цитата Сообщение от nnnikotinnn995 Посмотреть сообщение
а как можно растягивать?
Смотря что. Если каждый обьект отдельно, то, например, так:
C++
1
2
3
4
5
6
7
8
9
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Graphics::TBitmap* bit=new Graphics::TBitmap;     //Создаем обьект, класса Graphics::TBitmap
bit->LoadFromFile("F:\\bitmap.bmp");             //Загружаем в него изображение
Canvas->StretchDraw(Rect(25,25,600,600),bit);        //Рисуем на Канве, растягивая
delete bit;                                     //Освобождаем память
bit=NULL;
}
//---------------------------------------------------------------------------
В качестве первого параметра указывается область, на которое изображение будет растянуто.

Добавлено через 2 минуты
Или можно рисовать все обьекты в своем исходном размере, а затем всю картинку разом растянуть:
C++
1
2
3
4
5
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Canvas->CopyRect(Rect(0,0,600,600),Image1->Canvas,Rect(0,0,Image1->Width,Image1->Height));
}
//---------------------------------------------------------------------------
Добавлено через 1 минуту
Вообщем, все расписано здесь Краткое руководство по работе с классом TCanvas для начинающих
1
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
22.08.2011, 20:30
nnnikotinnn995
Так делайте перемещение в цикле, а не в таймере и если надо используйте Sleep
0
 Аватар для nnnikotinnn995
7 / 7 / 4
Регистрация: 07.07.2011
Сообщений: 583
22.08.2011, 21:30  [ТС]
Цитата Сообщение от NiTan Посмотреть сообщение
В таком случае, думаю, нужно использовать какие-нибудь сторонние библиотеки, специально преднзначенные для этого.
Щас попробую, а если не секрет, что это за сторонние библиотеки и что они в себя включают, содержат ли они в себе операторы плавного перемещения, компоненты, приведите пожалуйста пример (только не 3D OpenGL ,мне это пака рано).

Добавлено через 3 минуты
Цитата Сообщение от Avazart Посмотреть сообщение
Так делайте перемещение в цикле, а не в таймере и если надо используйте Sleep
Я так понимаю это в кейдауне надо писать, я чуть чуть попробовал ,может не правильно. но лучше не стало, а почему должно стать лучше?

Добавлено через 44 минуты
Решил я вспомнить игру Arkanoid, а так же уменьшил свои изображения до такого же размера - они не перестали дергаться, так что наверно растягивание не поможет.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
22.08.2011, 22:54
Как почему ?
Что заметнее двигать на 5 пикселей или на 1 ?
1
 Аватар для nnnikotinnn995
7 / 7 / 4
Регистрация: 07.07.2011
Сообщений: 583
23.08.2011, 14:28  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Так делайте перемещение в цикле, а не в таймере и если надо используйте Sleep
Ну сейчас терпимо, можно двигаться дальше, мне кажется Sleep не чего не меняет, только два недостатка, во первых при нажатие клавиши перемещение хоть и плавное, но сперва дернется, а потом едет (в таймере оно сразу включается). как в цикле его включать сразу? А во вторых я пака плохо знаком с циклами, подскажите пожалуйста как грамотнее остановит перемещение в FormKeyUp? Вот код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
Graphics::TBitmap *Dude;
int x=455,y=85;  // Координаты нашего обьекта
Graphics::TBitmap *bb;
int b=5,c=85;
Graphics::TBitmap* dump=new Graphics::TBitmap;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
//Думаю, понятно
   Dude=new Graphics::TBitmap;
  Dude->LoadFromFile("nn10.bmp");
   Dude->Transparent=true;
  bb=new Graphics::TBitmap;
   bb->LoadFromFile("nn10.bmp");
   bb->Transparent=true;
 
   dump->Width=Width;
   dump->Height=Height;
   dump->Canvas->FillRect(Rect(0,0,dump->Width,dump->Height));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
//Изменяем направление, в зависимости от нажатой клавиши (все очень просто - разберетесь)
 
if( Key == VK_LEFT)
for(int i=1;i<30;i++)      // Запускаем цикл, в каждом новом шаге которого будет рисовать новый кадр анимации
          {   x-=1;
            // Делаем это для небольших пауз между кадрам
          Application->ProcessMessages();       // Ммм... приводим приложение в чувство, чтобы оно могла перерисоваться
 dump->Canvas->FillRect(Rect(0,0,dump->Width,dump->Height));
              dump->Canvas->Draw(x,y,Dude);
          dump->Canvas->Draw(b,c,bb);              //Выводим на форму
                  Canvas->Draw(0,0,dump);
          }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormKeyUp(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
Dude->LoadFromFile("nn10.bmp");       //Загружаем кадр "простоя" обьекта
x-=0;
}
Вложения
Тип файла: 7z testanim5.7z (4.66 Мб, 21 просмотров)
0
 Аватар для nnnikotinnn995
7 / 7 / 4
Регистрация: 07.07.2011
Сообщений: 583
26.08.2011, 16:52  [ТС]
Цитата Сообщение от Grey Посмотреть сообщение
Обращение к жёсткому диску, довольно длительный процесс. Старайся картинки в оперативке хранить.
Цитата Сообщение от NiTan Посмотреть сообщение
наиболее оптимальный вариант - построение всей картинки в памяти, а затем вывод конечного результата на Канву, допустим, формы
А подскажите пожалуйста, что значит хранить и строить картинки в оперативке?
0
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
26.08.2011, 22:36
Извините, что так долго не отвечал в теме, просто я что-то совсем забыл о Вас.

Цитата Сообщение от nnnikotinnn995 Посмотреть сообщение
Щас попробую, а если не секрет, что это за сторонние библиотеки и что они в себя включают, содержат ли они в себе операторы плавного перемещения, компоненты, приведите пожалуйста пример (только не 3D OpenGL ,мне это пака рано).
Понятия не имею. Мне всегда хватало функционала стандартных библиотек, идущих вместе с Билдером (может быть просто я ни чем серьезным не занимался, связанным с графикой). Но скорее всего существуют.

Цитата Сообщение от nnnikotinnn995 Посмотреть сообщение
подскажите пожалуйста, что значит хранить и строить картинки в оперативке?
Вы можете выводить изображение последовательно, рисуя прямо, допустим, на Канве формы. То есть, при отрисовке каждого обьекта будет происходить обновление канвы. Но мы можем проводить все операции в памяти на Битмапе, а затем просто выводим конечный результат ( теоретик из меня просто отвратительный). Вот здесь вот я уже выкладывал измененный пример построения картинки Mortal Kombat - первые шаги
В Вашем варианте Вы отрисовывали все сразу на форме, а в моем варианте отрисовка происходит сперва на Битмапе, а затем идет вывод на Канву.
1
 Аватар для nnnikotinnn995
7 / 7 / 4
Регистрация: 07.07.2011
Сообщений: 583
29.08.2011, 16:41  [ТС]
Ну, приблизительно понятно. Я все же хочу поставить определенную точку с перемещением и идти дальше. Мне ни как не удавалось нормально останавливать перемещение в цикле в FormKeyUp, а в циклах do {
последовательность операторов
} while (условие);
while (условие) оператор;
нет границ да и с ними мне кажется не проще. Жарил кашу, и вдруг подумал, а чего бы не соединить таймер и цикл, и само перемещение получилось бы достаточно плавным и без проблем останавливается, и как раз мне подойдет , когда с прыжками начну возиться. Но тут один косяк - , без анимации все ОК, но при включение в цикл анимации кадры загружаются в реальном времени, а перемещение в 10 раз медленнее, можно добавить Sleep(10); ,но тогда чем дольше держишь кейдаун – тем позже происходит остановка перемещения и анимации (да и там такой дисбаланс во времени происходит). Можно поставить 2 таймера, на один перемещение в цикле, во втором анимация – но тогда начинает тормозить. Вот если бы можно было считать перемещение в одном времени, а анимацию в другом, тогда бы все получилось. Подскажите пожалуйста, можно ли это как то сделать , или существует другой путь?
вот код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#include <vcl.h>
#pragma hdrstop
 
#include "Unit2.h"
#include <math.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
Graphics::TBitmap *Dude;
int x=225,y=85;  // Координаты нашего обьекта
Graphics::TBitmap *bb;
int b=5,c=85;
Graphics::TBitmap* dump=new Graphics::TBitmap;
int AnimStep=1; //Кадр анимации
String Anim="n";
int Where=0;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
 
{
if( Key == VK_LEFT) Where=1;
if( Key == VK_RIGHT) Where=3;
if( Key == VK_UP) Where=5;
if( Key == VK_DOWN) Where=2;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormCreate(TObject *Sender)
{
  Dude=new Graphics::TBitmap;
  Dude->LoadFromFile("n1.bmp");
   Dude->Transparent=true;
  bb=new Graphics::TBitmap;
   bb->LoadFromFile("n1.bmp");
   bb->Transparent=true;
 
   dump->Width=Width;
   dump->Height=Height;
   dump->Canvas->FillRect(Rect(0,0,dump->Width,dump->Height));
}
//---------------------------------------------------------------------------
 
void __fastcall TForm2::FormKeyUp(TObject *Sender, WORD &Key, TShiftState Shift)
{
Where=0;
Dude->LoadFromFile("n1.bmp");           //Загружаем кадр "простоя" обьекта
}
//---------------------------------------------------------------------------
 
 
 
void __fastcall TForm2::Timer1Timer(TObject *Sender)
{
if( Where !=0 )     //Если задано направление
  {
 
  if( Where==3)             //Если задано движение вправо
  {             // Устанавливаем соответствующие имя  анимации
  for(int i=1;i<11;i++)      // Запускаем цикл, в каждом новом шаге которого будет рисовать новый кадр анимации
                  {
                     // Делаем это для небольших пауз между кадрами
 
          Application->ProcessMessages();       // Ммм... приводим приложение в чувство, чтобы оно могла перерисоваться
                                     // Собственно, перерисовываем форму, стирая тем самым старый кадр анимации
          Dude->LoadFromFile("n"+String(i)+".bmp");       //Загружаем новый кадр анимации под номером i
             Canvas->Draw(x,y,Dude);
                   x+=5;
                   dump->Canvas->FillRect(Rect(0,0,dump->Width,dump->Height));
                  dump->Canvas->Draw(x,y,Dude);
                  dump->Canvas->Draw(b,c,bb);              //Выводим на форму
                  Canvas->Draw(0,0,dump);   // Делаем это для небольших пауз между кадрам
                   }                   //Увеличиваем положение по x-координата не 5
  }
        if( Where==1){
  for(int i=1;i<11;i++)      // Запускаем цикл, в каждом новом шаге которого будет рисовать новый кадр анимации
                  {
                     // Делаем это для небольших пауз между кадрами
 
          Application->ProcessMessages();       // Ммм... приводим приложение в чувство, чтобы оно могла перерисоваться
                                     // Собственно, перерисовываем форму, стирая тем самым старый кадр анимации
          Dude->LoadFromFile("n"+String(i)+".bmp");       //Загружаем новый кадр анимации под номером i
             Canvas->Draw(x,y,Dude);
                   x-=5;
                   dump->Canvas->FillRect(Rect(0,0,dump->Width,dump->Height));
                  dump->Canvas->Draw(x,y,Dude);
                  dump->Canvas->Draw(b,c,bb);              //Выводим на форму
                  Canvas->Draw(0,0,dump);   // Делаем это для небольших пауз между кадрам
                   }
  }
 
  if (x<b+65) {
  x = b + 65;
  for(int i=1;i<33;i++)      // Запускаем цикл, в каждом новом шаге которого будет рисовать новый кадр анимации
                  {
                   b-=1;
                   dump->Canvas->FillRect(Rect(0,0,dump->Width,dump->Height));
                  dump->Canvas->Draw(x,y,Dude);
                  dump->Canvas->Draw(b,c,bb);              //Выводим на форму
                  Canvas->Draw(0,0,dump);
                  }
  }
    if( Where==5)           //Вверх
  {
  y-=5;
  }
    if( Where==2)           //Вниз
  {
  y+=5;
  }
 
 }
      dump->Canvas->FillRect(Rect(0,0,dump->Width,dump->Height));
                  dump->Canvas->Draw(x,y,Dude);
                  dump->Canvas->Draw(b,c,bb);              //Выводим на форму
                  Canvas->Draw(0,0,dump);
}
Вложения
Тип файла: 7z MK konetcn5.7z (6.35 Мб, 14 просмотров)
0
 Аватар для nnnikotinnn995
7 / 7 / 4
Регистрация: 07.07.2011
Сообщений: 583
30.08.2011, 13:49  [ТС]
Вообще если поставить интервал свыше 500, то можно поставить Sleep(), они уже начинают друг друга понимать, но ждать пол секунды пака движение остановится жутко долго.
0
6 / 6 / 0
Регистрация: 18.07.2011
Сообщений: 77
30.08.2011, 14:01
Попробуй переменние динамическими создать.Если обработалась функция пусть освобождаетса память занимаемая ней.
0
 Аватар для nnnikotinnn995
7 / 7 / 4
Регистрация: 07.07.2011
Сообщений: 583
01.09.2011, 12:54  [ТС]
Ну все не перепробуешь, как ни будь потом.
Цитата Сообщение от nnnikotinnn995 Посмотреть сообщение
Вот если бы можно было считать перемещение в одном времени, а анимацию в другом, тогда бы все получилось.
(скоро сам с собой буду разговаривать). В общем все, догадался, надо было только загрузку кадров поделить на n ну и еще кое что.
Цитата Сообщение от NiTan Посмотреть сообщение
Сделаешь. Просто Вам нужна более качественная анимация и немного поработать с интервалом между кадрами.
С таймером чудеса какие то происходят, я сделал for(int i=1;i<56;i++) (без Sleep(1) или с ним), а интервал таймера 500, но при этом не происходит паузы (как обычно) в 444 мс. Как так получилось, не смотря на ошибки все работает без ошибок, почему?
Вложения
Тип файла: 7z MK konetcn5.7z (6.34 Мб, 9 просмотров)
0
 Аватар для nnnikotinnn995
7 / 7 / 4
Регистрация: 07.07.2011
Сообщений: 583
09.09.2011, 16:23  [ТС]
При первых попытках сделать ИИ наткнулся на проблему одновременного выполнения операций - в одно и то же время перемещаться может только один персонаж. Можно попробовать прием "многопоточных приложений" Thread Object, но у меня перемещение в таймерах.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void __fastcall TForm2::Timer1Timer(TObject *Sender)
{
if( Where !=0 )     //Если задано направление
  {
 
  if( Where==3)             //Если задано движение вправо
  {             // Устанавливаем соответствующие имя  анимации
  for(int i=1;i<56;i++)      // Запускаем цикл, в каждом новом шаге которого будет рисовать новый кадр анимации
                  { Timer1->Interval=500;
                  Application->ProcessMessages();       // Ммм... приводим приложение в чувство, чтобы оно могла перерисоваться
                                     // Собственно, перерисовываем форму, стирая тем самым старый кадр анимации
          Dude->LoadFromFile("n"+String(i/4)+".bmp");       //Загружаем новый кадр анимации под номером i
             Canvas->Draw(x,y,Dude);
                   x+=1;
                   dump->Canvas->FillRect(Rect(0,0,dump->Width,dump->Height));
                  dump->Canvas->Draw(x,y,Dude);
                  dump->Canvas->Draw(b,c,bb);              //Выводим на форму
                  Canvas->Draw(0,0,dump);   // Делаем это для небольших пауз между кадрам
                 if( Where==5 ) return;  }                   //Увеличиваем положение по x-координата не 5
  }
Вообще я слышал что такие вещи с помощью таймеров не делают. Подскажите пожалуйста, как можно решить проблему одновременного выполнения операций не меняя принцип перемещения+анимации, или данный код надо в корне менять и обходится без таймеров?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
Unit1
void __fastcall MyThread::Execute()
{
    NameThreadForDebugging("MyThread2");
   int i=0;
while (!Terminated)
{
i++;
Form2->Timer1->Interval=520;
Sleep(5);
}   //---- Place thread code here ----
}
//---------------------------------------------------------------------------
Unit2
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit2.h"
#include <math.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
Graphics::TBitmap *Dude;
int x=455,y=125;  // Координаты нашего обьекта
int t=0;
Graphics::TBitmap *bb;
int b=-255,c=85;
Graphics::TBitmap* dump=new Graphics::TBitmap;
int AnimStep=1; //Кадр анимации
String Anim="n";
int Where=5;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
 
{
if( Key == VK_LEFT) Where=1;
if( Key == VK_RIGHT) Where=3;
else if(Key == VK_UP)  Where=7;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormCreate(TObject *Sender)
{
  Dude=new Graphics::TBitmap;
  Dude->LoadFromFile("n1.bmp");
   Dude->Transparent=true;
  bb=new Graphics::TBitmap;
   bb->LoadFromFile("n1.bmp");
   bb->Transparent=true;
 
   dump->Width=Width;
   dump->Height=Height;
   dump->Canvas->FillRect(Rect(0,0,dump->Width,dump->Height));
}
//---------------------------------------------------------------------------
 
void __fastcall TForm2::FormKeyUp(TObject *Sender, WORD &Key, TShiftState Shift)
{
   Where=5;
  Timer1->Interval=50;
  Timer2->Interval=50;
  Timer3->Interval=50;
Dude->LoadFromFile("n1.bmp");           //Загружаем кадр "простоя" обьекта
}
//---------------------------------------------------------------------------
 
 
 
void __fastcall TForm2::Timer1Timer(TObject *Sender)
{
if( Where !=0 )     //Если задано направление
  {
 
  if( Where==3)             //Если задано движение вправо
  {             // Устанавливаем соответствующие имя  анимации
  for(int i=1;i<56;i++)      // Запускаем цикл, в каждом новом шаге которого будет рисовать новый кадр анимации
                  { Timer1->Interval=500;
                  Application->ProcessMessages();       // Ммм... приводим приложение в чувство, чтобы оно могла перерисоваться
                                     // Собственно, перерисовываем форму, стирая тем самым старый кадр анимации
          Dude->LoadFromFile("n"+String(i/4)+".bmp");       //Загружаем новый кадр анимации под номером i
             Canvas->Draw(x,y,Dude);
                   x+=1;
                   dump->Canvas->FillRect(Rect(0,0,dump->Width,dump->Height));
                  dump->Canvas->Draw(x,y,Dude);
                  dump->Canvas->Draw(b,c,bb);              //Выводим на форму
                  Canvas->Draw(0,0,dump);   // Делаем это для небольших пауз между кадрам
                 if( Where==5 ) return;  }                   //Увеличиваем положение по x-координата не 5
  }
        if( Where==1){ Timer1->Interval=500;
        Sleep(1);
  for(int i=1;i<56;i++)      // Запускаем цикл, в каждом новом шаге которого будет рисовать новый кадр анимации
                  {
                     // Делаем это для небольших пауз между кадрами
 
          Application->ProcessMessages();       // Ммм... приводим приложение в чувство, чтобы оно могла перерисоваться
                                     // Собственно, перерисовываем форму, стирая тем самым старый кадр анимации
          Dude->LoadFromFile("n"+String(i/4)+".bmp");       //Загружаем новый кадр анимации под номером i
             Canvas->Draw(x,y,Dude);
                   x-=1;
                   dump->Canvas->FillRect(Rect(0,0,dump->Width,dump->Height));
                  dump->Canvas->Draw(x,y,Dude);
                  dump->Canvas->Draw(b,c,bb);              //Выводим на форму
                  Canvas->Draw(0,0,dump);   // Делаем это для небольших пауз между кадрам
                 if( Where==5 ) return; }
  }
 
  if (x<b+65) {
  x = b + 65;
  for(int i=1;i<13;i++)      // Запускаем цикл, в каждом новом шаге которого будет рисовать новый кадр анимации
                  { Sleep(40);
                   b-=1;
                   dump->Canvas->FillRect(Rect(0,0,dump->Width,dump->Height));
                  dump->Canvas->Draw(x,y,Dude);
                  dump->Canvas->Draw(b,c,bb);              //Выводим на форму
                  Canvas->Draw(0,0,dump);
                  }
  }
 
    if( Where==2)           //Вниз
  {
  y+=5;
  }
 
 }
      dump->Canvas->FillRect(Rect(0,0,dump->Width,dump->Height));
                  dump->Canvas->Draw(x,y,Dude);
                  dump->Canvas->Draw(b,c,bb);              //Выводим на форму
                  Canvas->Draw(0,0,dump);
}
//---------------------------------------------------------------------------
 
 
void __fastcall TForm2::Timer2Timer(TObject *Sender)
{
if( Where !=0 )     //Если задано направление
  {
 
 
        if( Where==7)           //Вверх
  { Timer2->Interval=520;
 
 for(int i=1;i<52;i++) {
 Sleep(10);
                    y=-t*35+t*t*3/4; //формула!
t++;
if(y>85)
t=0;
 dump->Canvas->FillRect(Rect(0,0,dump->Width,dump->Height));
                  dump->Canvas->Draw(x,y,Dude);
                  dump->Canvas->Draw(b,c,bb);              //Выводим на форму
                  Canvas->Draw(0,0,dump);
                  }
  }
 
 
 }
      dump->Canvas->FillRect(Rect(0,0,dump->Width,dump->Height));
                  dump->Canvas->Draw(x,y,Dude);
                  dump->Canvas->Draw(b,c,bb);              //Выводим на форму
                  Canvas->Draw(0,0,dump);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm2::Timer3Timer(TObject *Sender)
{
if( x>b+125)             //Если задано движение вправо
  {             // Устанавливаем соответствующие имя  анимации
  for(int i=1;i<56;i++)      // Запускаем цикл, в каждом новом шаге которого будет рисовать новый кадр анимации
                  { Timer3->Interval=500;
                  Application->ProcessMessages();       // Ммм... приводим приложение в чувство, чтобы оно могла перерисоваться
                                     // Собственно, перерисовываем форму, стирая тем самым старый кадр анимации
          bb->LoadFromFile("n"+String(i/4)+".bmp");       //Загружаем новый кадр анимации под номером i
             Canvas->Draw(b,c,bb);
                   b+=1;
                   dump->Canvas->FillRect(Rect(0,0,dump->Width,dump->Height));
                   dump->Canvas->Draw(x,y,Dude);
                   dump->Canvas->Draw(b,c,bb);
                          //Выводим на форму
                  Canvas->Draw(0,0,dump);
                 if(x<b+125) return; }
                  }
}
//---------------------------------------------------------------------------
Вложения
Тип файла: 7z MK konetcn5.7z (6.33 Мб, 14 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.09.2011, 16:23

Запустить Mortal Kombat X в Linux
Снес ущербную Win10 поставил Ubuntu, в игрушки играл только в Mortal kombat X (и 9). Можно здесь как-то сыграть? Спасибо

Как замедлить игру Mortal Kombat 4?
Как замедлить Mortal Kombat 4? (Выпущена в 1997 году, не под DOS, поэтом под DosBOX'ом не запускается). Что юзать? Заранее спасибо! ...

Не работает Mortal Kombat 9 (Komplete edition)
Скачал репак Mortal Kombat 9 (Komplete edition) от механиков на ноутбук (характеристики прилагаются). Выдает такие ошибки (во вложениях)....

Можно ли написать игру, подобную Mortal Kombat
Здравствуйте! Возможно ли написать на Delphi игру подобную Mortal Kombat?

Может ли один человек написать на С++ игру типа mortal kombat 3
Народ здравствуйте хотелось бы у вас узнать может ли один человек хорошо знаюший c++ (я еше правда тока учу его) написать игру типа mortal...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
53
Ответ Создать тему
Опции темы

Новые блоги и статьи
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru