1. Gewinne jetzt ein UMiDIGI C Note - alle Informationen findest du hier!!
  1. Zonnex, 20.07.2010 #1
    Zonnex

    Zonnex Threadstarter Fortgeschrittenes Mitglied

    Hi,

    um Bewegung in ein Spiel zu kriegen benutze ich z.Z. zwei Threads mit jeweils einem Handler (Ausschnitt ganz unten im Beitrag)

    Trotz der gesetzten Pausen via "handler.postDelayed(runnable, millisek)"
    entstehen scheinbar durch den ausgeführten code enorme Verzögerungen, sprich der emulator/das Handy kommen nicht hinterher..

    hab im Internet schon haufenweise Sachen über Threads gefunden u.a. LunarLander von Google... jedoch erschließt sich mir auch aus letzterem nicht wie man einen Thread macht der das Spiel immer in der selben Geschwindigkeit wiedergibt (ohne das schnellere Hardware das Spiel schneller macht)

    Nachtrag:
    - ohne "handler.postDelayed(runnable, millisek)" läuft das Programm scheinbar flüssig (sprich der ball rast von Ecke zu Ecke)
    - beim berühren des Displays merkt man wie der Ball-Thread ruckelt





    1. der Spieler wird in die Richtung der Touchposition bewegt
    Code:
    UpdateThread = new Runnable() 
            {
            	 
                @Override
                public void run() 
                {
                	if(i_pos != i_center)
        	{
        		if(i_pos > i_center)
        		{
        			i_center++;
        		}
        		else
        		{
        			i_center--;
        		}
        	}
        	postInvalidate();
                	updateHandler.postDelayed(this, 5);
                }
            };
    2. ein Ball bewegt sich autmatisch und es wird geprüft ob eine Kollision mit dem Rand oder Spieler entsteht
    Code:
    updateHandler = new Handler();
            UpdateThread = new Runnable() 
            {
            	 
                @Override
                public void run() 
                {
                	if(isRun)
                	{
                		update();
                    	updateHandler.postDelayed(this, 2);
                	}
                	else
                	{
                		gameStart();
                		updateHandler.postDelayed(this, 1000);
                	}
                	
                }
            };
            updateHandler.post(UpdateThread);
    
     public void update()
        {
        	kollision();
        	ball.move();
        }
    
        public void gameStart()
        {
        	if(i_start > 0)
        	{
        		tv_balls.setText("Spiel startet in " + i_start + " s!");
            	i_start--;
        	}
        	else
        	{
        		ball.reset();
        		isRun = true;
        		i_start = 5;
        		i_balls = 3;
        		tv_balls.setText("Bälle: " + i_balls);
        	}
        }
        
        public void kollision()
        {
        	
        	if(ball.getL() <= 0 || ball.getR() >= bg.getR())
        	{
        		ball.toggleX();
        	};
        	
        	if(ball.getT() <= 0)
        	{
        		ball.toggleY();
        	}
        	else if(ball.getB() >= player.getT())
        	{
        		if(ball.getCx() >= player.getL() && ball.getCx() <= player.getR())
        		{
        			ball.toggleY();
        		}
        		else
        		{
        			i_balls--;
        			if(i_balls > 0)
        			{
            			tv_balls.setText("Bälle: " + i_balls);
            			ball.reset();
        			}
        			else
        			{
        				tv_balls.setText("Loose!");
        				isRun = false;
        			}
        		};
        	};
        }
     
    Zuletzt bearbeitet: 20.07.2010
Die Seite wird geladen...
Ähnliche Themen Forum Datum
[ERLEDIGT] Navigation Drawer stürzt ab nach dem schchließen durch thread Android App Entwicklung 13.03.2017
Buttonfarbe ständig wechseln Android App Entwicklung 06.01.2017
Problem mit Thread bei Galaxy S5 und S6(Edge) Android App Entwicklung 23.09.2016
Du betrachtest das Thema "Performance von Threads" im Forum "Android App Entwicklung",