| 
				
				Координаты
				 |   |  
| 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  |  
| 
 | 
 |    |     
		
		 
 |