Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 13.12.2020
Сообщений: 12

Объект не отталкивается от стенок

22.10.2021, 12:46. Показов 1396. Ответов 9
Метки gui, java (Все метки)

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

Java
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
package com.java.racer.entities;
 
import java.awt.Graphics;
import java.awt.image.BufferedImage;
 
import com.java.racer.art.Art;
import com.java.racer.main.Game;
 
public class Player{
    public double x, y, velX, velY;
    
    private BufferedImage player; 
    
    public Player(double x, double y, Game game){
        this.x = x;
        this.y = y;
        
        Art art = new Art(game.getImage());
        player = art.getImage(1, 1, 32, 32);
    }
 
    public void tick(){
        x += velX;
        y += velY;
  
        if(x >= 400) x = 400;
        if(y >= 556) y = 556;
            /* Этот участок кода отвечает за отталкивание
        if(x <= 0) setVelX(-velX);  
        if(x >= Game.WIDTH) setVelX(velX);  
    
        if(y <= 0) setVelY(-velY);
        if(y >= Game.WIDTH) setVelY(velY);  
 
       */
    }
 
    public void render(Graphics graphics){
        graphics.drawImage(player, (int)x, (int)y, 100, 100, null);
        
    }
    
    public double getVelX() {
        return velX;
    }
 
    public void setVelX(double velX) {
        this.velX = velX;
    }
 
    public double getVelY() {
        return velY;
    }
 
    public void setVelY(double velY) {
        this.velY = velY;
    }
 
    public double getX(){
        return x;
    }
 
    public void setX(double x){
        this.x = x;
    }
 
    public double getY(){
        return y;
    }
 
    public void setY(double y){
        this.y = y;
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.10.2021, 12:46
Ответы с готовыми решениями:

Анимация <шар катается по столу и отталкивается от стенок>
Почему у меня не работает программа? Во-первых, шар не отталкивается от стенок, а просто исчезает Во-вторых, он ужасно сильно мигает. ...

Объект отталкивается от стенки
Здраствуйте, очень прошу помочь знающих людей. Киньте код или поскажите, где найти следующее - рисую я например в Form_Paint...

Объект отталкивается от формы и идет в обратном направлении
Доброго времени суток! В программе по таймеру срабатывает событие(рисую олимпийские кольца). Нужно чтоб она двигалась вниз, и как только...

9
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
22.10.2021, 12:56
Цитата Сообщение от gg35y Посмотреть сообщение
if(x <= 0) setVelX(-velX); 
        if(x >= Game.WIDTH) setVelX(velX);
почему в первом случае у тебя -velX, а во втором просто velX?
0
0 / 0 / 0
Регистрация: 13.12.2020
Сообщений: 12
22.10.2021, 15:49  [ТС]
если я поставлю -velX во втором if, то объект будет двигаться только вверх и вниз. При попытке пойти влево или вправо, его будет откидывать назад на начальную позицию.

Добавлено через 2 часа 38 минут
xoraxax,
Java
1
2
3
4
5
if(x <= 0) setVelX(-velX);  
if(x >= Game.WIDTH * Game.SCALE) setVelX(-velX);    
    
if(y <= 0) setVelY(-velY);
if(y >= Game.HEIGHT* Game.SCALE) setVelY(-velY);
Теперь в обоих случаях -velX/-velY, но моя главная проблема не исправлена
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
22.10.2021, 16:42
gg35y, шар хрустальный предлагаешь потереть
0
0 / 0 / 0
Регистрация: 13.12.2020
Сообщений: 12
22.10.2021, 16:57  [ТС]
не понял твоего ответа. В смысле "шар хрустальный предлагаешь потереть"?
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
24.10.2021, 22:30
Цитата Сообщение от xoraxax Посмотреть сообщение
почему в первом случае у тебя -velX, а во втором просто velX?
Очевидно он так делает полёт мяча (простите, объекта) в разные стороны. По коду кажется понятным это.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
25.10.2021, 01:14
Casper-SC, расскажи мне пожалуйста, как setVelX(velX) заставляет лететь мяч в другую сторону.
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
25.10.2021, 01:29
xoraxax, могу предположить, что снаружи, где используется этот класс какой-то код меняет значение поля velX, а потом выполняется в методе tick бессмысленный вызов setVelX(velX), но направление всё-таки меняется, так как там удачно подобранное значение

Я такой код видел, когда его писали так лишь бы работало, что это может быть правдой. Ну если серьёзно, я не особо вникал, бегло глянул, написал. Если присмотреться, то и правда магия и здесь нужен хрустальный шар.

Добавлено через 1 минуту
Цитата Сообщение от xoraxax Посмотреть сообщение
почему в первом случае у тебя -velX, а во втором просто velX?
Просто потому что работает. А как это другой уже вопрос. Снаружи что-то там поменялось, чтобы работало теперь внутри делаем манипуляции

Добавлено через 1 минуту
Цитата Сообщение от gg35y Посмотреть сообщение
не понял твоего ответа. В смысле "шар хрустальный предлагаешь потереть"?
Приведи полный код, который можно у себя запустить. Например, создай новый проект, в котором воспроизводится проблема. Пока твой вопрос выглядит так, как будто ты не хочешь, чтобы тебе помогли. Мало кому интересно сидеть гадать на кофейной гуще, тереть шар и т.д.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2773 / 491
Регистрация: 28.04.2012
Сообщений: 8,760
25.10.2021, 01:52
/DEL

Добавлено через 3 минуты
Цитата Сообщение от gg35y Посмотреть сообщение
Java
1
2
        if(x >= 400) x = 400;
        if(y >= 556) y = 556;
Вот это что такое?
0
296 / 149 / 67
Регистрация: 22.02.2017
Сообщений: 592
26.10.2021, 14:57
Java
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
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
 
 
 
public class Border
{
    public JLayeredPane swap;
    public int[] border = {800, 600};
    public JLabel ball = new JLabel();
    public int[] xy = {390,290};
    public int[] size = {50, 50};
    public int[] speed = {2, 2};
    
    
    public Border()
    {
        make_Window();
        make_Element();
        new WorkerThread();
    }
    
    
    private void make_Window()
    {
        JPanel panel = new JPanel();
        panel.setPreferredSize(new Dimension(border[0], border[1]));
        panel.setOpaque(false);
        
        JFrame win = new JFrame("Border");
        swap = new JLayeredPane();
        swap = win.getLayeredPane();
        win.add(panel);
        win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        win.setResizable(false);
        win.getContentPane().setBackground(Color.WHITE);
        win.pack();
        win.setLayout(null);
        win.setLocationRelativeTo(null);
        win.setVisible(true);
    }
    
    
    private void make_Element()
    {
        ball = new JLabel();
        ball.setBounds(xy[0], xy[1], size[0], size[1]);
        ball.setLayout(null);
        ball.setBackground(Color.RED);
        ball.setOpaque(true);
        ball.setVisible(true);
        swap.add(ball, new Integer(0), 0);
    }
    
    
    class WorkerThread extends Thread
    {
        int fps = 10;
 
        
        public WorkerThread()
        {
            setDaemon(true); 
            start();
        }
        
 
        public void run()
        {
            while (true)
            {
                for (int i = 0; i < 2; i++)
                {
                    xy[i] += speed[i];
                    
                    if (xy[i] < 0)
                    {
                        xy[i] = 0;
                        speed[i] *= -1;
                    }
                    else if (xy[i] + size[i] + speed[i] > border[i])
                    {
                        xy[i] = border[i] - size[i] - speed[i];
                        speed[i] *= -1;
                    }
                }
                
                ball.setLocation(xy[0], xy[1]);
                
                try
                {
                    sleep(fps);
                }
                catch (InterruptedException e){}
            }
        }
    }
    
    
    public static void main(String[] args)
    {
        new Border();
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.10.2021, 14:57
Помогаю со студенческими работами здесь

В окне перемещаются объекты, отталкиваясь от стенок окна. Каждый объект имеет свой поток, перемещающий его. Встретившись, объекты начинают двигаться
В окне перемещаются объекты, отталкиваясь от стенок окна. Каждый объект имеет свой поток, перемещающий его. Встретившись, объекты...

Почему postion absolute "отталкивается" не от краев браузера, а от родительского элемента?
Почему иногда блоки отказываются работать корректно со стилем position: absolute ? К примеру, есть конструкция вида &lt;div...

Точка "пробивает" линии прямоугольника и не отталкивается
Почему точка &quot;пробивает &quot; линии прямоугольника и не отталкивается?в чем ошибка?заранее спасибо скрины прилагаются

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
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