Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
1

2 D гонка

06.08.2011, 14:19. Просмотров 4744. Ответов 16
Метки нет (Все метки)

Хотел бы создать игру 2d гоночку, но ни как не могу понять как реализовать МаПу, типо чтобы когда машинка ехала, пусть даже эт будет просто Image карта тоже двигалась, ну как в игре тот же МАРИО, только если можно то по подробнее обясните как это делается, Мыслю мне подкинте и сё) а там я сам
1
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.08.2011, 14:19
Ответы с готовыми решениями:

Гонка потоков?
День добрый! Изучаю потоки, зашёл на javarush, там приводится простенький пример 2-х потоков,...

Гонка (С++) игра
Сперва введешь координату примерно 20х20 и выходит на экран машина а теперь не могу его сдвинуть с...

Гонка Need for Speed World начнётся в июле
Компания Electronic Arts (EA) объявила о том, что многопользовательская гоночная игра Need for...

UrbanRace в июне. Питер. Крупнейшая в Европе городская гонка
Может кому будет интересно: 16 июня 2012 года пройдет крупнейшая в Европе городская...

16
365 / 247 / 24
Регистрация: 03.04.2011
Сообщений: 558
Записей в блоге: 1
06.08.2011, 15:16 2
Саму карту можно сделать по разному например как двух мерных массив, где от значения элемента массива будет рисоваться определенный объект.
Или же, можно сделать специальный список объектов, которые себя сами будут рисовать(ООП) при перерисовки сцены, ну а твоя тачка уже относительно координат!

Добавлено через 21 минуту
И начинай вообще учить OpenGL или DirectX, так как Канва...Это Канва!
1
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
06.08.2011, 15:27  [ТС] 3
Дай плиз ссылку на Опет и ДиректX
1
Покинул форум
3177 / 1362 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
06.08.2011, 16:05 4
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от pomkalk Посмотреть сообщение
И начинай вообще учить OpenGL или DirectX, так как Канва...Это Канва!
В данной ситуации Канва ничем не уступает ни OpenGL, ни DirectX, ведь требуется создать простую 2D-гонку.

Добавлено через 1 минуту
Вот, эта тема будет полезна Разработка "игры" для зачета
3
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
06.08.2011, 16:56  [ТС] 5
NiTan А вот чем лучше будет пулу сделать из Image или спомощью CAnvasa, просто я из Image пулю но когда она летает со скорость Left-=14 то её еле видно она мерцает очень сильно, почему так происходит???
1
1064 / 582 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
06.08.2011, 17:08 6
попробуй в onCreate для для формы добавить

C++
1
DoubleBuffered=true;
должно выглядеть примерно так

C++
1
2
3
4
void __fastcall TForm1::FormCreate(TObject *Sender)
{
DoubleBuffered=true;
}
1
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
06.08.2011, 17:21  [ТС] 7
Двойная буферизация у меня в начале кода стоит, эт не то тут что то на другое, не ну конечно когда я сокрость меньше ставлю к примеру 7 то всё отлично, ток медленно)
1
365 / 247 / 24
Регистрация: 03.04.2011
Сообщений: 558
Записей в блоге: 1
06.08.2011, 17:33 8
А ты у Image1 или у формы DoubleBuffered поставил??))

Добавлено через 30 секунд
его нужно ставить там, где ты рисовать будешь, если ты в TImage рисуешь , тогда в нем!
1
1064 / 582 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
06.08.2011, 17:36 9
Цитата Сообщение от pomkalk Посмотреть сообщение
А ты у Image1 или у формы DoubleBuffered поставил??))

Добавлено через 30 секунд
его нужно ставить там, где ты рисовать будешь, если ты в TImage рисуешь , тогда в нем!
Не обязательно!))) Я рисую на Image3 а стоит для Form1)) И нет мерцаний!)
1
365 / 247 / 24
Регистрация: 03.04.2011
Сообщений: 558
Записей в блоге: 1
06.08.2011, 17:49 10
Infinity3000, У меня тоже так было, потом я выключил у форма, и снова включил! стало мерцать)) по этому что бы наверняка, я у имага включал!))
1
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
06.08.2011, 20:41  [ТС] 11
А откуда вы у Image 2 буферизацию нашли????

Добавлено через 12 секунд
Там нет такого

Добавлено через 40 секунд
Infinity3000 если ты рисуешь на Image то попробуй сделтьь движение для него и увеличи скороть до 20 хотябы
0
648 / 459 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
07.08.2011, 14:26 12
GoldDragon, в таймере пишешь
C++
1
Repaint();
А в событие формы OnPaint свои функции вызываешь.

Таким образом ничего мерцать не должно.

Если хочешь напишу код камеры, использую его для своей игрушки.
1
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
07.08.2011, 14:57  [ТС] 13
Напиши если не трудно

Добавлено через 1 минуту
QVO то что надо))), мерцание прекратилось

Добавлено через 32 секунды
Всем Спасибо!!!!!
0
648 / 459 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
07.08.2011, 15:07 14
GoldDragon,
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
//
//TCamera - сырой
//
class TCamera
{
  private:
  bool Right_X;
  bool Left_X;
  bool Top_Y;
  bool Down_Y;
  
  public:
  int  Left;
  int  Top;
  int  Right;
  int  Down;
  int  L, T, R, D;
 
  public:
  TCamera(int l, int t, int r, int d);
  void Move(int Pos_X, int Pos_Y);
};
 
TCamera::TCamera(int l, int t, int r, int d)
  {
        Left                    = l;//320 /*Left pos Map*/;
        Top                     = t;//320 /*Top pos Map*/;
        Right                   = r;//320 /*Right pos Map*/;
        Down                    = d;//320 /*Bottom pos Map*/;
        Left_X                  = true;
        Right_X                 = true;
        Top_Y                   = true;
        Down_Y                  = true;
  }
  void TCamera::Move(int Pos_X, int Pos_Y)
  {
        if(Left_X)
        {
                if(Pos_X < 320)
                {
                        Left    = 0;
                        Right   = 640;
                        Right_X = false;
                }
                if(Pos_X > 320)
                {
                        Left    = 320;
                        Right   = 320;
                        L       = Pos_X - Left;
                        R       = Pos_X + Right;
                        Right_X = true;
                }
        }
        if(Right_X)
        {
                if(Pos_X > 958)
                {
                        Left    = 320;
                        Right   = 640;
                        Left_X  = false;
                }
                if(Pos_X < 958)
                {
                        Left    = 320;
                        Right   = 320;
                        L       = Pos_X - Left;
                        R       = Pos_X + Right;
                        Left_X  = true;
                }
        }
        if(Top_Y)
        {
                if(Pos_Y < 320)
                {
                        Top     = 0;
                        Down    = 600;
                        Down_Y  = false;
                }
                if(Pos_Y > 320)
                {
                        Top     = 320;
                        Down    = 320;
                        T       = Pos_Y - Top;
                        D       = Pos_Y + Down;
                        Down_Y  = true;
                }
        }
        if(Down_Y)
        {
                if(Pos_Y > 958)
                {
                        Top     = 320;
                        Down    = 640;
                        Top_Y   = false;
                }
                if(Pos_Y < 958)
                {
                        Top     = 320;
                        Down    = 320;
                        T       = Pos_Y - Top;
                        D       = Pos_Y + Down;
                        Top_Y   = true;
                }
        }
        // Пример использования
        // map_buffer - буфер на котором нарисована вся карта
        // camera_buffer - буфер нашей камеры, который нужно будет выводить на эктран
        // Form1->Canvas->Draw(0, 0, camera_buffer);
        // Pos_X и Pos_Y это позиция твоего персонажа.
        // размер карты 640х640 пикселей.
        // размер камеры 320х320
        /*camera_buffer->Canvas->CopyRect(
                                Rect(
                                0   /*Left pos ClientDraw*/,
                                0   /*Top pos ClientDraw*/,
                                320 /*Right pos ClientDraw*/,
                                320 /*Bottom pos ClientDraw*/),
                                map_buffer->Canvas,
                                Rect(
                                L   /*Left pos Map*/,
                                T   /*Top pos Map*/,
                                R   /*Right pos Map*/,
                                D   /*Bottom pos Map*/));
       */
  }
 
  //TCamera *Camera = new TCamera(320,320,320,320);


Если у кого есть наработки с камерой... давайте делится опытом?
0
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
07.08.2011, 17:36  [ТС] 15
QVO а что такое Repaint(); и почему после написание этой функции картинка перестает мерцать

Добавлено через 1 минуту
и чем Repaint(); отличается от Refresh();
0
648 / 459 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
07.08.2011, 18:14 16
GoldDragon, написав в таймере Repaint ты вызываешь перерисовку формы. Это равносильно если написать Form1->Repaint() или Button1->Click(). С Refresh() никогда не работал и не знаю что оно делает. Где-то в литературе должно быть написано.
0
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
07.08.2011, 18:19  [ТС] 17
эт типо обновление или стерания, в канве используется, кстати разницы никакой, тоже самое делает и мерцание пропадает)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.08.2011, 18:19

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Написать игру "гонка с выбыванием"
Нужно написать игру на Visual Basic. Вот условие: Игра &quot;Гонка с выбыванием&quot;. В мотокроссе...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.