Doczytywanie zdjęć

0

Witam w mojej grze którą ostatnio pisze napotkałem na problem. W miarę upływu czasu gra stawała się coraz większa od tworzenia nowych mapek. I tak sobie pomyślałem czy nie można buło by zaoszczędzić ram tworząc trzy image do których po przejściu jakiegoś obszaru doczytało by się kolejną część mapy . Kiedy próbowałem tak zrobić program zaczął ciąć. Jeśli znacie jakieś techniki na oszczędność ram to proszę pomóżcie mi ;)

1

Wszystko zależy od kodu, nie ma żadnego ultimate-poradnika.

1

To z doczytywaniem to raczej dobry pomysł. Warto jednak wczytywanie rozpocząć w osobnym wątku (żeby nie blokować głównego) i trochę wcześniej, niż w momencie kiedy dane są potrzebne.

0

@IForgotMyPass Czyli tworzyć nowy wątek odpowiedzialny za samo doczytywanie i liczyć że się nie będzie ciąć ?

1

Jeśli wykonujesz to w osobnym wątku, generalnie nie powinno ciąć.

1

Nie wiem dokładnie jak Twój problem wygląda, ale na przykład jak masz jakąś mapkę podzieloną na sektory i gracza w jakimś sektorze, to możesz zacząć w drugim wątku doczytywać sąsiednie sektory wtedy, gdy gracz znajduje się powiedzmy w brzegowych 10%-15% sektora - wszystko zależy od tego oczywiście jakie te sektory są duże.

0

Dobra stworzyłem nowy wątek do którego zawarłem że jeśli gracz zaczyna zbliżać się do końca obrazu (to gra platformowa) to do zmiennej która ma wcześniejszy teren (do metody paint ładuje cztery zdjęcia dwa tła i dwa powierzchnie) chce wczytać kolejny. Na początku dałem to bez pętli to nie działało. Niestety problem nie ustał. Nie wiem o co chodzi może mapki są zbyt duże. Macie jakieś poradniki do budowy terenu tak aby nie zjadało przeszło gigabajta ramu ?

0

Może to ta pętla mi coś kisi ale bez niej doczytują się tylko te obrazki na początku

1
Marcin902 napisał(a):

Dobra stworzyłem nowy wątek do którego zawarłem że jeśli gracz zaczyna zbliżać się do końca obrazu (to gra platformowa) to do zmiennej która ma wcześniejszy teren (do metody paint ładuje cztery zdjęcia dwa tła i dwa powierzchnie) chce wczytać kolejny. Na początku dałem to bez pętli to nie działało. Niestety problem nie ustał. Nie wiem o co chodzi może mapki są zbyt duże. Macie jakieś poradniki do budowy terenu tak aby nie zjadało przeszło gigabajta ramu ?

A jak zaimplementowałeś usuwanie niepotrzebnych obszarów, bo po Twoim poście zauważyłem że skupiasz się na wczytywaniu obszarów, a na usuwaniu niepotrzebnych nic nie piszesz, może tam masz błąd?

0

@ThePing Po prostu nadpisuje. Masz jakiś pomysł aby to naprawić? Szukałem jakiś przydatnych metod które eclipse mi podpowiadał ale nie mogę nic znaleźć

0

W końcu mi się udało. Poprzednio program mi ciął bo obrazek wczytywał się za każdym razem na nowo. Dzięki z apomoc

public class Engine extends JPanel implements KeyListener {
	int X, połorzenie;
	File file = new File("Podłorze do gry nr 8 360p.png");
	File file2 = new File("Tło do gry nr 8 360p.png");
	boolean wczytaj;
	Image image1,image2;
	
			Engine(){
				
				
				
		}		
			
		public void paint(Graphics g){
			super.paint( g);
			Graphics2D g2d = (Graphics2D) g.create();	
		
			g2d.drawImage(image2,połorzenie,0,8912,720,this);
		
		
			
		}
	
	
			public void kierunek(int c){
				
				if(c == 39){
					X = -5;
				}
				else if(c==37){
					
					X = 5;
					
					
				}
				
			}
	
			private void wczytaj(int d) {
				if(d == 10){
					wczytaj = true;
					
				}
				
			}
	
			public void move(){
				połorzenie += X;
				
				
				
				if(wczytaj == true){
					
					try {
						image2 = ImageIO.read(file2);
					} catch (IOException e) {
						System.out.println("Nie znaleziono tła");
						e.printStackTrace();
					}
					wczytaj = false;
					
				}
				
				
				
				
				
				
				
			}
	
	
	
	
	
	

	@Override
	public void keyPressed(KeyEvent e) {
		int c = e.getKeyCode();
		kierunek(c);
	}

	@Override
	public void keyReleased(KeyEvent e) {
	     int d = e.getKeyCode();
	     wczytaj(d);
		
	}

	

	@Override
	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}
	
	
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1