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

Написание игры: как создавать объекты с разными текстурами?

18.06.2014, 16:25. Показов 2140. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Спасибо всем, кто ответит мне.
Вообщем я новичок, только начал Java изучать.
И мне нужна помощь уже продвинутых людей в этом деле.
Я написал такую игру (гонки), в которой находится четыре класса:
Main
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package ru.java2e;
 
import java.awt.Component;
import javax.swing.*;
 
public class Main {
 
    public static void main(String[] args){
        JFrame f = new JFrame("Race With Dead");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(1100, 638);
        f.add(new Road());
        f.setVisible(true);
        f.setLocationRelativeTo(null);
        JOptionPane.showMessageDialog(null, "Управление: \n Пробел \n Шифт \n WASD");
    }
}
Road
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package ru.java2e;
 
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
 
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.Timer;
 
public class Road extends JPanel implements ActionListener, Runnable {
    
    int win = 0;
    
    Timer mainTimer = new Timer(20, this);
 
    Image img = new ImageIcon(getClass().getClassLoader().getResource("res/road.jpg")).getImage();
    Image img1 = new ImageIcon(getClass().getClassLoader().getResource("res/road2.jpg")).getImage();
    
    Player p = new Player();
    
    Thread enemiesFactory = new Thread(this);
    
    List<Enemy> enemies = new ArrayList<Enemy>();   
 
    public Road() {
        mainTimer.start();
        enemiesFactory.start();
        addKeyListener(new MyKeyAdapter());
        setFocusable(true);
    }
    
    private class MyKeyAdapter extends KeyAdapter {
        public void keyPressed(KeyEvent e) {
            p.keyPressed(e);
        }
        public void keyReleased(KeyEvent e) {
            p.keyReleased(e);
        }
    }
    
    public void paint(Graphics g) {
        g = (Graphics2D) g;
        Font font = new Font("Arial", Font.BOLD, 30);
        g.drawImage(img, p.layer1, 0, null);
        g.drawImage(img1, p.layer2, 0, null);
        g.drawImage(p.img, p.x, p.y, null);     
        g.setFont(font);
        g.drawString("Пройдено: " + win + "%", 500, 35);
        
        double v = (p.MAX_V * 2 / p.MAX_V) * p.v;
        g.setColor(Color.BLACK);
        g.drawString("Скорость: " + v + "км/ч", 70, 35);
        
        if(p.s > 1) {   
        win = (100000/100/1000) * (p.s/998);
        g.setColor(Color.BLACK);
 
        }
        
        Iterator<Enemy> i = enemies.iterator();
        while(i.hasNext()) {
            Enemy e = i.next();
            if (e.x >= 2400 || e.x <= -2400) {
                i.remove();
            } else {
                e.move();
                g.drawImage(e.img, e.x, e.y, null);
            }
            if (e.y >= 400) {
                i.remove();
            }
        }
    }
    public void actionPerformed(ActionEvent e) {
        p.move();
        repaint();
        testCollisionWithEnemies();
        testWin();
    }
 
    private void testWin() {
        
        if (p.s > 100000) {
            JOptionPane.showMessageDialog(null, "Вы победили!");
            System.exit(0);
        }
        
    }
    private void testCollisionWithEnemies() {
        
        Iterator<Enemy> i = enemies.iterator();
        while (i.hasNext()) {
            Enemy e = i.next();
            if (p.getRect().intersects(e.getRect())) {
                JOptionPane.showMessageDialog(null, "Вы проиграли!");
                System.exit(1);
            }
        }
    }
    @Override
    public void run() {
        
        while(true) {
            Random rand = new Random();
 
                try {
                    Thread.sleep(rand.nextInt(1800));
                    enemies.add(new Enemy(1100,rand.nextInt(600),rand.nextInt(50),this));
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
        }
    }
}
Player
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
package ru.java2e;
 
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
 
import javax.swing.ImageIcon;
 
public class Player {
    
    //public static final int MAX_V = 61;
    public static final int MAX_TOP = 1;
    public static final int MAX_BOTTOM = 395;
 
    Image img_c = new ImageIcon(getClass().getClassLoader().getResource("res/igrok.png")).getImage();
    Image img_l = new ImageIcon(getClass().getClassLoader().getResource("res/igrok left.png")).getImage();
    Image img_r = new ImageIcon(getClass().getClassLoader().getResource("res/igrok right.png")).getImage();     
    
    Image img = img_c;
    
    int MAX_V = 61;
    int v = 0;
    int dv = 0;
    int s = 0;
    
    int x = 80;
    int y = 50;
    int dy = 0;
    
    int layer1 = 0;
    int layer2 = 1200;
    
    public Rectangle getRect() {
        return new Rectangle(x, y, 245, 50);
    }
    public void move() {
        s += v;
        v += dv;
        if (v <= 0) v = 0;
        if (v >= MAX_V) v = MAX_V;
        y -= dy;
        if (y <= MAX_TOP) y = MAX_TOP;
        if (y >= MAX_BOTTOM) y = MAX_BOTTOM;
        if (layer2 - v <= 0) {
            layer1 = 0;
            layer2 = 1200;
        } else {
        layer1 -= v;
        layer2 -= v;
        }
        
    }
    
    public void keyPressed(KeyEvent e) {
        int key = e.getKeyCode();
        if (key == KeyEvent.VK_SPACE) {
            dv = -20;
        }
        if (key == KeyEvent.VK_D) {
            dv = 1;
        }
        if (key == KeyEvent.VK_A) {
            dv = -3;
        }
        if (key == KeyEvent.VK_W) {
            dy = 8;
            img = img_l;
        }
        if (key == KeyEvent.VK_S) {
            dy = -8;
            img = img_r;
    }
    }
    public void keyReleased(KeyEvent e) {
        int key = e.getKeyCode();
        if (key == KeyEvent.VK_SPACE) {
            dv = 0;
        }
        if (key == KeyEvent.VK_SHIFT) {
            dv = -1;
        }
        if (key == KeyEvent.VK_D) {
            dv = -1;
    }
        if (key == KeyEvent.VK_A) {
            dv = -1;
        }
        if (key == KeyEvent.VK_W || key == KeyEvent.VK_S) {
            dy = 0;
            img = img_c;
    }
 
    }
    
}
Enemy
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
package ru.java2e;
 
import java.awt.Image;
import java.awt.Rectangle;
 
import javax.swing.ImageIcon;
 
public class Enemy {
 
    int x;
    int y;
    int v;
    Image img = new ImageIcon(getClass().getClassLoader().getResource("res/enemy.png")).getImage();
    Road road;
    
    public Rectangle getRect() {
        return new Rectangle(x, y, 245, 50);
    }
    
    public Enemy(int x, int y, int v, Road road) {
        this.x = x;
        this.y = y;
        this.v = v;
        this.road = road;
    }
    
    public void move() {
        x = x - road.p.v + v;
    }
    
}
Вообщем мне нужно сделать так, чтобы создавались на дороге помимо этих врагов, такие же только с другими текстурами.
Помогите пожалуйста, кто поможет тому +1 в карму ^^

Добавлено через 1 час 17 минут
Ну разве сложно кому-нибудь уделить минутку, и помочь мне? (
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.06.2014, 16:25
Ответы с готовыми решениями:

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

Текстурирование куба разными текстурами
Здравствуйте. Использую GLFW, GLSL. Я начинающий кодер. Встал вопрос: как текстурировать куб разными текстурами? Да, я знаю, что...

Сделать модель Box с разными текстурами на гранях
Искал, Искал, но ничего не нашёл... :cry: Помогите, как это сделать :help:

8
Форумчанин
5958 / 4192 / 406
Регистрация: 28.12.2013
Сообщений: 24,134
18.06.2014, 17:46
скачал игру а толку 0 лучше начни с другого.
0
0 / 0 / 0
Регистрация: 18.06.2014
Сообщений: 5
18.06.2014, 17:50  [ТС]
WyPik, я конечно всё понимаю, но этого я не понимаю :\
0
Форумчанин
5958 / 4192 / 406
Регистрация: 28.12.2013
Сообщений: 24,134
18.06.2014, 17:58
Цитата Сообщение от Gab125 Посмотреть сообщение
я конечно всё понимаю, но этого я не понимаю :\
если бы ты все понимал то выложил бы нужный класс а не всю игру

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

Впринципе все понятно описал.
0
0 / 0 / 0
Регистрация: 18.06.2014
Сообщений: 5
18.06.2014, 18:02  [ТС]
WyPik, если бы я всё понимал, я бы не обращался за помощью.
Я врага то создал, но у меня возникла проблема с появлением его в самой игре.
0
Форумчанин
5958 / 4192 / 406
Регистрация: 28.12.2013
Сообщений: 24,134
18.06.2014, 18:06
потому что врага нужно добавить на дорогу в методе ран.
0
0 / 0 / 0
Регистрация: 18.06.2014
Сообщений: 5
18.06.2014, 18:09  [ТС]
WyPik, оу, почему-то сразу не додумался :\
Спасибо за помощь ^^ +1 тебе в карму!
0
18.06.2014, 20:13

Не по теме:

Таки не наврал. Правда +1 в карму =)))))

0
rhume
27.10.2014, 09:29
Говоришь сам написал))
ну ну...
С видео урока все взято. Абсолютно. Под чистую.
Если новичок, то начни с чего то простого, а не с готового кода.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.10.2014, 09:29
Помогаю со студенческими работами здесь

Как динамически создавать объекты?
Добрый день! Есть задача нарисовать картинку, на которой будут двигаться объектики, все это происходит на JPanel при помощи класса...

Как правильно создавать объекты ?
Как правильно создавать объекты и как они расходуют память, что является правильным подходом? вариант 1: public class...

Как динамически создавать объекты класса ?
Всем привет! У меня есть файл app.config в котором хранится информация о точках. У каждой точки 3 св-ва: name, defaultValue и match....

Как правильно создавать объекты на форме?
Задача следующей программы рисовать гибкий график функции на поле класса PictureBox. Для этого я создал класс, в котором объявляется объект...

DirectX: Как динамически создавать простые 3d объекты
Добрый день! Помогите, пожалуйста! Как создать приложение на Visual C# с использованием DirectX? Должен быть реализован следующий...


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

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