Cześć, od 4 dni męczę się z pewnym problemem dotyczącym contac listenera w box2D. A mianowicie pracują na prostą grą wykorzystującą własnie box2D i mam taki problem, że chciałbym, żeby za każdym razem kiedy gracz dotknie bloku, mógł podskoczyć jeszcze raz, a jak dotknie innego bloku, żeby dostawał boosta. Wszystko robię w metodzie beginContact i wydaje mi sie, że napisałem tam kod tak, by program przelatując po obydwu Arrayach zawierających jedna zwykłe bloki, a druga bloki boostujące włączał możliwość skoku przy zetknięciu z którymkolwiek blokiem, ale po zetknięciu z blokiem boostującym również nadawał graczowi impuls. Kod wygląda jak na obrazku, jednak to co się dzieje, to co jakiś czas, nawet gdy gracz spadnie na zwykły blok, to również dostaje boosta i zupełnie nie wiem o co chodzi. Co więcej, za każdym razem metoda begin contact jest wykonywana tak jakby 2 razy. Dodałem do każdej pętli System.out z jakimś komunikatem i czasem wyświetla się on poprawnie, lecz 2 razy tj. np wyskakuje w konsoli "collided with common block", ale czasami wyświetla 2 wiadomości, jedną taką jak przed chwilą, a drugą ""collided with boost block", tak jakby dotknął 2 bloków na raz, mimo, że w danym momencie kontakt był tylko z blokiem zwykłym. Czasem również od zwykłego bloku gracz otrzymuje również boosta co nie jest pożądane. Niestety zupełnie nie wiem co jest nie tak z tym kodem, może jakoś źle rozumiem jego działanie? Więc jeżeli ktoś umiałby mi coś pomóc w tym temacie to byłbym bardzo wdzięczny.

public void beginContact(Contact contact) {
				for(Square a : squares1){
					if((contact.getFixtureA().getBody() == player.body && contact.getFixtureB().getBody() == a.body)
                                                                                           ||
                                            (contact.getFixtureA().getBody() == a.body && contact.getFixtureB().getBody() == player.body)){
						jump = true;
						player.body.setLinearVelocity(0, 0);
						player.body.applyLinearImpulse(new Vector2(60,60), player.body.getWorldCenter().add(-0.1f, 0), true);
						
					}
			}
				
				for(Square s : squares){
					if((contact.getFixtureA().getBody() == player.body && contact.getFixtureB().getBody() == s.body)||(contact.getFixtureA().getBody() == s.body && contact.getFixtureB().getBody() == player.body)){
						jump = true;
					}
				}
				
				
			
				
				
			}

			@Override
			public void endContact(Contact contact) {
				
				
			}