Координаты
| |
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); я не понимаю,какие это координаты на изображении.
|
|
| |
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, спасибо)), а мы то глупые смотрели в код как обизяны тут и дураку понимающему новичку будет понятно что не от балды координаты взяты, а из собственных расчетов, и координат самого спрайта(высота, ширина(самого изображения), и его позиция на этом изображении откуда вырезать)
|
|
| |
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 |
|
| |
|