Сейчас у меня довольно много времени (промедление, zzz), поэтому буду очень признателен за любую помощь!
В настоящий момент у меня есть проект, который включает создание 2D-RPG с топ-мерной размерностью, он не должен быть большим, просто небольшое представление общих элементов RPG.
Хотя я не очень далеко, у меня есть цели и сроки, чтобы встретиться, поэтому в настоящее время я работаю со спрайтами и анимацией.
Во-первых, моя игра построена на системе 2D-массивов, что мне показалось довольно разумным в нисходящей RPG. В любом случае, я нашел подходящий класс Sprite для использования в Интернете, и в своей игре я пытаюсь сделать две вещи анимированными / работающими. Мой главный герой и огненный шар. Огненный шар - это, по сути, его заклинание. По моему мнению, я хочу видеть, когда я нажимаю кнопку на своей клавиатуре, огненный шар должен «появляться» или вытягиваться в месте расположения персонажа (это все, что у меня есть до сих пор D: смеется), а затем продолжайте идти прямо в направлении, в котором стоит персонаж.
Итак, это для огненного шара. Что касается главного героя, у меня есть в общей сложности восемь изображений, причем анимация ходьбы каждого направления представлена двумя изображениями. Это все в одном изображении (spritesheet), которое я импортировал в свой проект и смог отделить с помощью getSubimage () от BufferedImage.
Дело в том, что я застрял здесь. Я не уверен, каким образом я должен заставить огненный шар начинать прямо в направлении, в котором находится персонаж (я предполагаю, что это как-то связано со скоростью, но я также немного невежественен в плаваниях). в дюймы для простоты LOL).
В том же отношении я не уверен, как мне следует плавно воспроизводить символы для двух изображений, предназначенных для анимации ходьбы при каждом нажатии клавиши со стрелкой ВВЕРХ.
Просто не разбираюсь в анимации! Я прочитал почти все, но я все еще в замешательстве и стрессе из-за крайнего срока (ОЧЕНЬ скоро, если вы понимаете, о чем я).
Я выложу часть своего кода, не уверен, что вам, ребята, понадобится больше, но я готов!
Еще раз, я очень ценю любую помощь, которую я получаю, большое спасибо!
p.s. Я новичок, так что мой код должен быть очень запутанным для большинства, но я полагаю, что это придет со временем
ArrayList<TreeMonster> treeMonsters = new ArrayList<TreeMonster>();
ArrayList<Fireball> qProjectiles = new ArrayList<Fireball>();
private Timer timer;
private void toggleKey(int keyCode, boolean pressed){
if (keyCode == KeyEvent.VK_Q){
qProjectiles.add(new Fireball(vlad.getXLoc(), vlad.getYLoc(), vlad.getDirection(), vlad.getLevel()*10));
}
}
// Entities are spawned on the map
public void spawnOnMap(Matter[][] map){
map[1][1] = new Matter(1, 1, 1);
vlad.moveTo(1,1);
map[4][4] = new Matter(3, 4, 4);
treeMonsters.add(new TreeMonster(4, 4));
map[4][7] = new Matter(3, 4, 7);
treeMonsters.add(new TreeMonster(4, 7));
map[8][2] = new Matter(3, 8, 2);
treeMonsters.add(new TreeMonster(8, 2));
map[8][8] = new Matter(3, 8, 8);
treeMonsters.add(new TreeMonster(8, 8));
map[12][3] = new Matter(3, 12, 3);
treeMonsters.add(new TreeMonster(12, 3));
map[12][9] = new Matter(3, 12, 9);
treeMonsters.add(new TreeMonster(12, 9));
map[14][6] = new Matter(3, 14, 6);
treeMonsters.add(new TreeMonster(14, 6));
map[16][10] = new Matter(3, 16, 10);
treeMonsters.add(new TreeMonster(16, 10));
map[19][5] = new Matter(3, 19, 5);
treeMonsters.add(new TreeMonster(19, 5));
map[2][1] = new Matter(2, 2, 1);
npcOne.moveTo(2, 1);
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
while (vlad.living()){
Graphics g2d = (Graphics2D)g;
g2d.drawImage(desertMap,0,0,this);
for (int i = 0; i < treeMonsters.size(); i++){
g2d.drawImage(treeMonsters.get(i).tree, treeMonsters.get(i).getXLoc()*64, treeMonsters.get(i).getYLoc()*64, this);
}
for (int i = 0; i < qProjectiles.size(); i++){
g2d.drawImage(qProjectiles.get(i).fBallSprite.getImage(), qProjectiles.get(i).xLoc()*64, qProjectiles.get(i).yLoc()*64, this);
if (vlad.getDirection() == 0){
qProjectiles.get(i).fBallSprite.setVelocityY(0.2f);
}
if (vlad.getDirection() == 1){
qProjectiles.get(i).fBallSprite.setVelocityY(-0.2f);
}
if (vlad.getDirection() == 2){
qProjectiles.get(i).fBallSprite.setVelocityX(-0.2f);
}
if (vlad.getDirection() == 3){
qProjectiles.get(i).fBallSprite.setVelocityX(0.2f);
}
}
if (vlad.disableFirst){
g2d.drawImage(vlad.getDirectionImage(), vlad.getXLoc()*64, vlad.getYLoc()*64, this);
}
else{
if (vlad.getDirection() == 0){
vlad.upWalk.update(System.currentTimeMillis());
g2d.drawImage(vlad.upWalk.sprite, vlad.getXLoc()*64, vlad.getYLoc()*64, this);
}
else if (vlad.getDirection() == 1){
vlad.downWalk.update(System.currentTimeMillis());
g2d.drawImage(vlad.downWalk.sprite, vlad.getXLoc()*64, vlad.getYLoc()*64, this);
}
else if (vlad.getDirection() == 2) {
vlad.leftWalk.update(System.currentTimeMillis());
g2d.drawImage(vlad.leftWalk.sprite, vlad.getXLoc()*64, vlad.getYLoc()*64, this);
}
else if (vlad.getDirection() == 3){
vlad.rightWalk.update(System.currentTimeMillis());
g2d.drawImage(vlad.rightWalk.sprite, vlad.getXLoc()*64, vlad.getYLoc()*64, this);
}
}
g2d.drawImage(npcOne.getImage(), 2*64, 1*64, this);
}
}