Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/35: Рейтинг темы: голосов - 35, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 05.10.2016
Сообщений: 7

Как реализовать прыжок персонажа?

14.05.2017, 15:08. Показов 7196. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу для практики игру, которая выскакивает в хроме, когда интернета нет.
Есть две вещи, которые не получается реализовать в коде.
1. Прыжок(нужно, чтобы при нажатии на стрелку вверх прыгал). Мне нужно сделать так, чтобы он начал двигаться вверх, потом остановился и начал обратно двигаться вниз.
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
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
#include <vcl.h>
#pragma hdrstop
 
#include "dino1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
Graphics::TBitmap*dino1 = new Graphics::TBitmap();
Graphics::TBitmap*dino2 = new Graphics::TBitmap();
Graphics::TBitmap*dino3 = new Graphics::TBitmap();
Graphics::TBitmap*dino4 = new Graphics::TBitmap();
Graphics::TBitmap*Kaktus1 = new Graphics::TBitmap();
Graphics::TBitmap*Kaktus4 = new Graphics::TBitmap();
 int x=100, y=150;
 int a=600, b=150;
 int flag = 1;
 int rd; //0-дино не прыгает, 1-дино прыгает
 TRect aRect;
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
 
{       dino3->LoadFromFile("dino3.bmp");
        dino3->Transparent=true;
 
        Kaktus1->LoadFromFile("Kaktus1.bmp");
        Kaktus1->Transparent=true;
 
        Kaktus4->LoadFromFile("Kaktus4.bmp");
        Kaktus4->Transparent=true;
 
        dino1->LoadFromFile("dino1.bmp");
        dino1->Transparent=true;
 
        dino2->LoadFromFile("dino2.bmp");
        dino2->Transparent=true;
 
        dino4->LoadFromFile("dino4.bmp");
        dino4->Transparent=true;
 
 
 
        Timer1->Interval = 10;
        Timer2->Interval = 20;
 
        rd=0; //дино не прыгает
 
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormPaint(TObject *Sender)
{
    Canvas->Draw(x,y,dino1);
    aRect=Rect(0,250,10000,255);   //земля полоска 
    Canvas->Brush->Color=clPurple;
    Canvas->FillRect(aRect);
 
    Canvas->Draw(a,b,Kaktus1); //кактус 1
 
 
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{     //таймер для динозаврика
      if(x+55!=a)   //если только по этой координате, то будет останавливаться даже в прыжке с кактусом
 
      {
 
      if(1 == flag)
      {
        //стереть картинку
        //переместить картинку
        //загрузить одну картинку
        Canvas->Brush->Color=Form1->Color;
        Canvas->FillRect(Rect(x,y,x+100,y+100));
        Canvas->Draw(x,y,dino2);
        flag = 0;
      }
      else
      {
        //стереть картинку
        //переместить картинку
         //загрузить другую картинку
                Canvas->Brush->Color=Form1->Color;
                Canvas->FillRect(Rect(x,y,x+100,y+100));
                Canvas->Draw(x,y,dino1);
                flag = 1;
                 }             }
 
      else
      {
           Canvas->Brush->Color=Form1->Color;
           Canvas->FillRect(Rect(x,y,x+100,y+100));
           Canvas->Draw(x,y,dino3);
 
         }
 
        if(rd!=0)
        {
           if(rd==1)
           {
               Canvas->Brush->Color=Form1->Color;
               y=x*x;
               Canvas->FillRect(Rect(x,y,x+100,y+100));
               Canvas->Draw(x,y,dino4);
 
                }
 
 
                }
 
}
 
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
     if(rd!=0)  //прыжок
     return;
 
   if(Key==VK_UP)
    rd=1;
 
 
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Timer2Timer(TObject *Sender)
{
//таймер для кактуса
        if(a!=x+55)
         {
                Canvas->Brush->Color=Form1->Color;
                Canvas->FillRect(Rect(a,b,a+100,b+100));
                a=a-1;
                Canvas->Draw(a,b,Kaktus1);    }
        else
        {
                Canvas->Brush->Color=Form1->Color;
                Canvas->FillRect(Rect(a,b,a+100,b+100));
                Canvas->Draw(a,b,Kaktus4);
 
                }
}
//---------------------------------------------------------------------------
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.05.2017, 15:08
Ответы с готовыми решениями:

Прыжок персонажа
Есть два спрайта персонаж и платформа и есть код прыжка на кнопке пробел: if (Input.GetKeyDown (KeyCode.Space)) { ...

Прыжок персонажа
Привет:) Как сделать плавный прыжок персонажу? Из имеющегося кода выходит, что он может ходить влево-вправо, но если прыгает, то это...

Прыжок персонажа в 2D платформере
Здравствуйте, пишу 2D платформер на C#, про XNA и MonoGame знаю, интересует именно WinForms. В прошлой теме помогли с плавным перемещением,...

5
 Аватар для TButton
290 / 87 / 28
Регистрация: 25.01.2016
Сообщений: 529
Записей в блоге: 1
16.05.2017, 11:56
Лучший ответ Сообщение было отмечено rikayowa как решение

Решение

Хотя я и не знаю, что вам нужно, я понял, что вам нужен бегемотик в виде динозавра, который может ходить влево-вправо, прыгать, не выходить за грани и сталкиваться с кактусом. Всё это я реализовал проще некуда! Бегемотик управляется стрелочками на клавиатуре. Вот исходник
Вложения
Тип файла: zip дино.zip (516.9 Кб, 99 просмотров)
1
0 / 0 / 0
Регистрация: 05.10.2016
Сообщений: 7
17.05.2017, 12:59  [ТС]
Image1->Top а возможна данная реализация в битовых образах? или придется все же задавать прорисовку в таймере при нажатии клавиши вверх?
0
129 / 65 / 16
Регистрация: 03.09.2015
Сообщений: 832
18.05.2017, 07:12
Лучше использовать один таймер и внутри писать:
если зажата стрелка вверх, вызываем функцию vverh()
и так же с другими.
Только вот с многозадачностью проблемы будут. Если разные потоки, всеравно к одной картинке одновременно нельзя дать разные команды, как я помню. Вылезет ошибка наподобие ошибка доступа
0
0 / 0 / 0
Регистрация: 05.10.2016
Сообщений: 7
18.05.2017, 09:04  [ТС]
Разные таймеры т к движение объектов должны быть с разными скоростями.
0
 Аватар для TButton
290 / 87 / 28
Регистрация: 25.01.2016
Сообщений: 529
Записей в блоге: 1
19.05.2017, 11:09
Цитата Сообщение от rikayowa Посмотреть сообщение
а возможна данная реализация в битовых образах?
Возможна для тех, у кого есть опыт работы с битовыми образами.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.05.2017, 11:09
Помогаю со студенческими работами здесь

Как правильно реализовать прыжок в 3-х мерном мире?
Есть мир по которому можно перемещаться и вращать камеру. Как правильно реализовать прыжок? Пишу на C++.

Как реализовать выбор персонажа в игре?
Пишу игру и застопорился на реализации выбора персонажа. Скажем, у меня есть два класса персонажей, игрок выбирает один из них, после чего...

"Прыжок" в коде. Как реализовать?
К примеру есть такой код: begin . . . &lt;&gt; try .

Реализовать прыжок в игре типа Runner
Помогите реализовать прыжок, игра в жанре Runner, нужно создать постоянное движение вправо, но при этом он должен уметь прыгать на ходу,...

Как реализовать код, который при клике мышкой на объект, телепортировал персонажа в конкретную точку
Помогите пожалуйста. Подскажите как реализовать Скрипт который при клике мышкой на объект, телепортировал персонажа в конкретную точку. ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru