Четверг, 14 Ноября 2024, 21:39

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Координаты
LolmanДата: Среда, 26 Сентября 2012, 19:03 | Сообщение # 1
был не раз
Сейчас нет на сайте
В скачанном мною исходнике есть изображение,где присутствуют все движения игрока.В проекте они описаны так:

Code
public BufferedImage[][] player;
player = new BufferedImage[4][3*4];
           for (int i=0; i<4; i++)
               for (int j=0; j<3*4; j++)
                   player[i][j] = clip(src, 32+j*8, 16+i*8, 8, 7);

от я и хотел спросить у вас,дорогие форумчане,что означают 4 предпоследние строчки кода,а в особенности координаты.(За ответ +1 к репутации).
Вот изображение спрайтов player http://i.imgur.com/ZYnJ8.gif.


Сообщение отредактировал Lolman - Среда, 26 Сентября 2012, 20:16
LetsOffBrainsДата: Среда, 26 Сентября 2012, 19:31 | Сообщение # 2
Project SoRDeLKa
Сейчас нет на сайте
Вероятно "вырезание" нужных картинок из тайлсета. Координаты - коры нужных тайлов.
Могу ошибаться, но вероятно это так.



LolmanДата: Среда, 26 Сентября 2012, 20:15 | Сообщение # 3
был не раз
Сейчас нет на сайте
LetsOffBrains, Да,ты прав.На одном изображении несколько спрайтов игроков изображены в несколько строчек.Добавил изображение к теме,можете сравнить координаты,потому что я никак все не могу понять,что означает эта строчка:
Code
(src, 32+j*8, 16+i*8, 8, 7);
FadeBakerДата: Среда, 26 Сентября 2012, 20:34 | Сообщение # 4
JavaSE Game Developer
Сейчас нет на сайте
Lolman, дай код метода clip().

Уроки по GM
Minecraft 2D на GM
— Мои проекты —
Blood Harvest [2D] — Original
Blood Harvest [2D]: Remastered Edition
Adventure Craft [2D] — Sandbox
Space Shock [2D] — Scroll Shooter
Intel® Core™ i5-3570K 3.40 GHz, 8 GB RAM, GeForce GTX 750 Ti, Monitor: LG 23EA63V-P.
LolmanДата: Среда, 26 Сентября 2012, 21:19 | Сообщение # 5
был не раз
Сейчас нет на сайте
Fade,
Code
    public static BufferedImage clip(BufferedImage src, int x, int y, int w, int h)
     {
         GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
         BufferedImage newImage = null;

         try
         {
             GraphicsDevice screen = ge.getDefaultScreenDevice();
             GraphicsConfiguration gc = screen.getDefaultConfiguration();
             newImage = gc.createCompatibleImage(w, h, Transparency.BITMASK);
         }
         catch (Exception e)
         {
         }

         if (newImage == null)
         {
             newImage = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
         }

         int[] pixels = new int[w * h];
         src.getRGB(x, y, w, h, pixels, 0, w);
         newImage.setRGB(0, 0, w, h, pixels, 0, w);

         return newImage;
     }
}
arrow25Дата: Среда, 26 Сентября 2012, 21:44 | Сообщение # 6
постоянный участник
Сейчас нет на сайте
Lolman, глупый вопрос), что у тебя появляется на экране?
и не ужели не понятно что делает этот код? C (единственным изображением), он просто берет его в буфер затем режет его, и возвращает как готовую картинку, по входщим параметрам функции должно быть все ясно.
LolmanДата: Среда, 26 Сентября 2012, 21:55 | Сообщение # 7
был не раз
Сейчас нет на сайте
arrow25, Это я понимаю,тут ничего трудного нет.Я не понимаю обозначение координат...Если бы они выглядели примерно так:
Code
player = clip(src, 0, 0, 32, 15);

то я бы разобрался.
Но так как они выглядят так:
Code
player[i][j] = clip(src, 32+j*8, 16+i*8, 8, 7);

я не понимаю,какие это координаты на изображении. sad
arrow25Дата: Среда, 26 Сентября 2012, 21:59 | Сообщение # 8
постоянный участник
Сейчас нет на сайте
Lolman, ну дак это почти тоже самое)), просто у каждго кодера в голове свои мухи летают), ему не надо писать например так function(4,6,9) он лучше напишет function (2*2,3*3,6+3)
ShadowZiДата: Среда, 26 Сентября 2012, 22:03 | Сообщение # 9
постоянный участник
Сейчас нет на сайте
Quote (arrow25)
ему не надо писать например так function(4,6,9) он лучше напишет function (2*2,3*3,6+3)

Он проходит по всему тайлсету с шагом в 8 и выбирает нужные кадры. Обращаем внимание что в цикле.
2ТС
Можешь попробовать побаловаться с координатами и поменять формулы расчёта. Ты увидишь скорее что всё пообламывается, вернее пообрезается


Сообщение отредактировал ShadowZi - Среда, 26 Сентября 2012, 22:04
arrow25Дата: Среда, 26 Сентября 2012, 22:08 | Сообщение # 10
постоянный участник
Сейчас нет на сайте
ShadowZi, спасибо)), а мы то глупые смотрели в код как обизяны cry
тут и дураку понимающему новичку будет понятно что не от балды координаты взяты, а из собственных расчетов, и координат самого спрайта(высота, ширина(самого изображения), и его позиция на этом изображении откуда вырезать)
LolmanДата: Четверг, 27 Сентября 2012, 19:26 | Сообщение # 11
был не раз
Сейчас нет на сайте
Code

public class Bitmaps
{
public BufferedImage[] trees;
public BufferedImage[][] people;
// и так далее

public BufferedImage logo, wonScreen;

public void loadAll() throws IOException
{
logo = ImageIO.read(Bitmaps.class.getResource("/logo.png"));
wonScreen = ImageIO.read(Bitmaps.class.getResource("/winscreen.gif"));
BufferedImage src = ImageIO.read(Bitmaps.class.getResource("/sheet.gif"));
trees = new BufferedImage[16];
for (int i=0; i<16; i++)
trees[i] = clip(src, 32+i*8, 0, 8, 16);
farmPlots = new BufferedImage[9];
for (int i=0; i<9; i++)
farmPlots[i] = clip(src, 32+i*8, 11*8, 8, 8);
rocks = new BufferedImage[4];
for (int i=0; i<4; i++)
rocks[i] = clip(src, 32+12*8+i*8, 16, 8, 8);
carriedResources = new BufferedImage[4];
for (int i=0; i<4; i++)
carriedResources[i] = clip(src, 32+12*8+i*8, 16+16, 8, 8);
delete = clip(src, 32+16*8+3*16, 0, 16, 16);
help = clip(src, 32+16*8+3*16, 16, 16, 16);
soundButtons = new BufferedImage[2];
for (int i=0; i<2; i++)
soundButtons[i] = clip(src, 32+16*8+3*16, 32+i*16, 16, 16);
houses = new BufferedImage[3][8];
for (int x=0; x<3; x++)
for (int y=0; y<8; y++)
houses[x][y] = clip(src, 32+16*8+x*16, y*16, 16, 16);

people = new BufferedImage[4][3*4];
for (int i=0; i<4; i++)
for (int j=0; j<3*4; j++)
people[i][j] = clip(src, 32+j*8, 16+i*8, 8, 7);
towerTop = clip(src, 0, 0, 32, 15);
towerMid = clip(src, 0, 16, 32, 8);
towerBot = clip(src, 0, 24, 32, 8);
smoke = new BufferedImage[5];
for (int i=0; i<5; i++)
smoke[i] = clip(src, 256-8, i*8, 8, 8);
infoPuffs = new BufferedImage[5];
for (int i=0; i<5; i++)
infoPuffs[i] = clip(src, 256-8-16, i*8, 16, 8);
island = new BufferedImage(256, 256, BufferedImage.TYPE_INT_ARGB);
int[] pixels = new int[256*256];
ImageIO.read(Bitmaps.class.getResource("/island.gif")).getRGB(0, 0, 256, 256, pixels, 0, 256);
island.setRGB(0, 0, 256, 256, pixels, 0, 256);
}
public static BufferedImage clip(BufferedImage src, int x, int y, int w, int h)
{
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
BufferedImage newImage = null;
try
{
GraphicsDevice screen = ge.getDefaultScreenDevice();
GraphicsConfiguration gc = screen.getDefaultConfiguration();
newImage = gc.createCompatibleImage(w, h, Transparency.BITMASK);
}
catch (Exception e)
{
}
if (newImage == null)
{
newImage = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
}
int[] pixels = new int[w * h];
src.getRGB(x, y, w, h, pixels, 0, w);
newImage.setRGB(0, 0, w, h, pixels, 0, w);
return newImage;
}
}


Сообщение отредактировал Lolman - Четверг, 27 Сентября 2012, 19:26
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг