1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

Performance von Threads

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Zonnex, 20.07.2010.

  1. Zonnex, 20.07.2010 #1
    Zonnex

    Zonnex Threadstarter Fortgeschrittenes Mitglied

    Beiträge:
    431
    Erhaltene Danke:
    49
    Registriert seit:
    12.09.2009
    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

Diese Seite empfehlen