Форум программистов, компьютерный форум CyberForum.ru

Как убрать столкновение Объектов на плоскости с пустым пространством? - C++

Восстановить пароль Регистрация
 
Itsgonnabeme
1 / 1 / 0
Регистрация: 01.07.2016
Сообщений: 7
01.07.2016, 22:30     Как убрать столкновение Объектов на плоскости с пустым пространством? #1
Код определяет столкновение по х и y.
C++
1
2
 if ((obj1.x + obj1.width >= obj2.x) && (obj1.x <= obj2.x + obj2.width)) XColl = true;
 if ((obj1.y + obj1.height >= obj2.y) && (obj1.y <= obj2.y + obj2.height)) YColl = true;
C++
1
Если (столкновение) то  Obj1.x = Obj1.x-1  // Это движение персонажа. Если (столнулся со стенкой) то назад на 1
Вопрос: У меня получается, что Obj1(персонаж) сталкивается не только с Obj2(стенка), но и с пустым пространством по X. Как от этого избавиться по Х и Y. Объясните пожалуйста.
На картинке попытался нарисовать

Пояснение: В теме gamedev уже написал. Сдесь написал потому, что думаю, в этой ветке большее количество специалистов программирования.
Миниатюры
Как убрать столкновение Объектов на плоскости с пустым пространством?  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2016, 22:30     Как убрать столкновение Объектов на плоскости с пустым пространством?
Посмотрите здесь:

столкновение C++
C++ Столкновение объектов в играх
C++ Builder Как создать столкновение в играх!
Visual C++ Гемор с пространством имен.
Столкновение C++ WinAPI
Столкновение объектов C++ Builder
Диалоговое окно открывается пустым Visual C++
Окно компилируется пустым C++ WinAPI
C++ и директивы include c пространством имён C++
Создать абстрактный базовый класс объектов на декартовой плоскости CShape и разработать иерархию классов конкретных фигур C++
Несколько модулей с одним пространством имен C++
C++ Странность с классом , пространством имен и string C++ Builder

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
 Аватар для vxg
2726 / 1737 / 173
Регистрация: 13.01.2012
Сообщений: 6,510
02.07.2016, 08:30     Как убрать столкновение Объектов на плоскости с пустым пространством? #2
Itsgonnabeme, что такое пустое пространство? Границы поля? Ну так не засчитывайте за столкновение этот случай. Как он вообще у вас в столкновениях оказался? По идее игрока просто должно не пускать дальш. Ну разве что у вас стены ядовитые)
Itsgonnabeme
1 / 1 / 0
Регистрация: 01.07.2016
Сообщений: 7
02.07.2016, 17:40  [ТС]     Как убрать столкновение Объектов на плоскости с пустым пространством? #3
что такое пустое пространство? Границы поля? Ну так не засчитывайте за столкновение этот случай. Как он вообще у вас в столкновениях оказался? По идее игрока просто должно не пускать дальш. Ну разве что у вас стены ядовитые)
В том и дело что по X по все повехности не пускает. а должно пускать. Когда игрок в игре встречает предмет выше себя он прыгает на него. а у меня не пускает от земли до самого конца окна.
vxg
Модератор
 Аватар для vxg
2726 / 1737 / 173
Регистрация: 13.01.2012
Сообщений: 6,510
03.07.2016, 07:31     Как убрать столкновение Объектов на плоскости с пустым пространством? #4
Itsgonnabeme, не особо понятное объяснение. Если надо прыгать вверх сквозь площадку которая не пускает вниз анализируйте направление движения
Itsgonnabeme
1 / 1 / 0
Регистрация: 01.07.2016
Сообщений: 7
14.07.2016, 00:33  [ТС]     Как убрать столкновение Объектов на плоскости с пустым пространством? #5
Я сам все решил, но у меня получилось очень грамоздко
Столкновение с 4 сторонами left,top,right bottom
QBasic/QuickBASIC
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
FOR i=ps\y-ImageWidth(obj2) TO ps\y+ImageHeight(obj2) STEP 1
        IF (i=pd\y) AND (ps\x=(pd\x+ImageWidth(obj2)))  THEN
                Text 300, 400, "CollideX"
                collx=1
                Delay 10
        EndIf
    
NEXT
 
FOR j=ps\x-ImageWidth(obj2) TO ps\x+ImageWidth(obj2) STEP 1  
        IF (j=pd\x) AND (ps\y=(pd\y+ImageWidth(obj2))) THEN
            Text 250, 400, "CollideY"
            colly=1
            Delay 10
    EndIf
    
NEXT
 
FOR i=ps\y-ImageHeight(obj2) TO ps\y+ImageHeight(obj1) STEP 1
        IF (i=pd\y) AND (ps\x+ImageWidth(obj2)=pd\x)  THEN
          Text 350, 400, "CollideX1"
          collx2=1
          Delay 10
   EndIf
NEXT
 
FOR j=ps\x-ImageWidth(obj2) TO ps\x+ImageWidth(obj2) STEP 1  
        IF (j=pd\x) AND ((ps\y+ImageWidth(obj2))=(pd\y)) THEN
            Text 260, 400, "CollideY1"
            colly2=1
            Delay 10
        EndIf
    
NEXT
 
 
IF(collx=1) THEN 
pd\x=pd\x-1
collx=0
EndIf
 
IF(colly=1) THEN 
pd\y=pd\y-1
colly=0
EndIf
 
 
IF(collx2=1) THEN 
pd\x=pd\x+1
collx2=0
EndIf
 
IF(colly2=1) THEN 
pd\y=pd\y+1
colly2=0
EndIf
Yandex
Объявления
14.07.2016, 00:33     Как убрать столкновение Объектов на плоскости с пустым пространством?
Ответ Создать тему
Опции темы

Текущее время: 15:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru