Форум программистов, компьютерный форум, киберфорум
Python: PyGame
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 2
Регистрация: 19.03.2024
Сообщений: 10

Ошибка с отталкиванием от стенок

21.01.2025, 18:06. Показов 2492. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет, пишу игру на pygame и у меня появилась проблема. Суть игры в том, чтоб персонаж прыгал по стенкам. В игре есть возможность, что когда персонаж находится на стене, он может от неё оттолкнуться. Но если зажать левую кнопку мыши, то персонаж почему то будет спускаться вниз от стенки к стенке. Как это пофиксить. Если интересно, то игра по типу игры "Wall Kickers"

Вот код:

Python
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
import pygame
import os
import time
 
pygame.init()
 
WIDTH, HEIGHT = 180, 1500
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Monkey Jump")
 
WHITE = (255, 255, 255)
 
FPS = 60
clock = pygame.time.Clock()
 
character_image = pygame.image.load(os.path.join("data", "MONKEY_JUMP.png"))
character_width, character_height = character_image.get_size()
 
new_width = character_width // 2
new_height = character_height // 2
character_image = pygame.transform.scale(character_image, (new_width, new_height))
 
x, y = WIDTH // 2, HEIGHT - new_height
speed_x, speed_y = 0, 0
gravity = 0.5
jump_force = -15
 
on_ground = False
on_wall = False
wall_slide_speed = 1
 
wall_push_speed = 3
wall_push_direction = 0
push_counter = 0
 
 
def draw():
    screen.fill(WHITE)
    screen.blit(character_image, (x, y))
    pygame.display.flip()
 
 
running = True
while running:
    clock.tick(FPS)
 
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
 
        if event.type == pygame.MOUSEBUTTONDOWN:
            if event.button == 1:
                print('Была нажата левая кнопка мыши')
                if on_ground or on_wall:
                    speed_y = jump_force
                    on_ground = False
                    on_wall = False
 
    keys = pygame.key.get_pressed()
 
    speed_y += gravity
    y += speed_y
 
    if y + new_height >= HEIGHT:
        y = HEIGHT - new_height
        speed_y = 0
        on_ground = True
 
    previous_on_wall = on_wall
    on_wall = False
    if x <= 0 or x + new_width >= WIDTH:
        on_wall = True
        speed_y = min(speed_y, wall_slide_speed)
 
    if push_counter == 0:
        if x <= 0:
            on_wall = True
            speed_y = min(speed_y, wall_slide_speed)
            wall_push_direction = 1
 
        elif x + new_width >= WIDTH:
            on_wall = True
            speed_y = min(speed_y, wall_slide_speed)
            wall_push_direction = -1
 
    if on_wall and event.type == pygame.MOUSEBUTTONDOWN:
        if push_counter == 0:
            print(f"Отталкивание от стены! Текущие координаты X: {x}")
            push_counter = 1
 
    if push_counter > 0:
        x += wall_push_speed * wall_push_direction
        push_counter += 1
 
        if push_counter > 20:
            push_counter = 0
 
    if keys[pygame.K_a]:
        x -= 5
    if keys[pygame.K_d]:
        x += 5
 
    if x < 0:
        x = 0
    if x + new_width > WIDTH:
        x = WIDTH - new_width
 
    draw()
 
pygame.quit()
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.01.2025, 18:06
Ответы с готовыми решениями:

Движение объектов с отталкиванием от краев формы
Здравствуйте. Как оформить движение объектов, например TShape, по форме, чтобы они отталкивались от краев? Есть такой пример кода, но он...

Движение кнопки по форме с отталкиванием от границ контейнера
Очень нужна помощь в решении данной задачи - Расположить на форме панель. Добавить выпадающее меню с 2 пунктами: &quot;Запустить&quot; и...

JQuery меню справа с "отталкиванием" контента
Привет всем. Как сделать подобный кусок сайта? ...

4
228 / 169 / 71
Регистрация: 14.06.2024
Сообщений: 458
21.01.2025, 18:36
ну а где *.png для наглядности?
0
1 / 1 / 2
Регистрация: 19.03.2024
Сообщений: 10
21.01.2025, 19:57  [ТС]
любое качай и вставляй
0
228 / 169 / 71
Регистрация: 14.06.2024
Сообщений: 458
21.01.2025, 20:08
точно, мне нужнее
0
1 / 1 / 2
Регистрация: 19.03.2024
Сообщений: 10
21.01.2025, 20:50  [ТС]
udmurt2024, ну тогда не пиши сюда емае
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.01.2025, 20:50
Помогаю со студенческими работами здесь

Шарики отскакивают от стенок
подскажите: как сделать что бы шары отталкивались от стенок?

Отталкивание шара от стенок
Добрый день) Нужно написать программу, в которой шар отталкивается от стенок и меняет цвет после каждого удара. Объясните, пожалуйста,...

Отскакивание мячика от стенок
Нажимаю выполнить и не выполняется Uses Graphabc,Events,crt; var f:boolean; h,x1,y1,x2,y2,x3,y3,x4,y4:integer; ...

Объект не отталкивается от стенок
Нужна помощь от знающих. Написал код в котором объект, соприкасающийся со стенкой, отталкивается в противоположную сторону. Но проблема в...

Шарики отскакивают от стенок
Сделал, чтобы 1 шарик отскакивал от стенок. А можете сделать, чтобы так себя вели 2 шарика и отталкивались друг от друга?


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru