10. Εξαφάνιση

Το κεφάλαιο σε pdf.
Κατεβάστε το

Για να αυξήσουμε το ενδιαφέρον του χρήστη, θα κάνουμε το αστέρι να εξαφανίζεται μετά από κάποιο χρόνο και σε προκαθορισμένους χρόνους θα εμφανίζονται νέα αστέρια στα οποία ο χρήστης θα πρέπει να κάνει κλικ. Το περιβάλλον Greenfoot μας παρέχει έναν τρόπο να θέσουμε το κατά πόσο μια εικόνα θα έχει διαφάνεια ή όχι. Όταν η τιμή της διαφάνειας (transparency) είναι 255 η εικόνα φαίνεται πλήρως, όταν η διαφάνεια (transparency) πάρει την τιμή 0 τότε η εικόνα δεν φαίνεται καθόλου (πλήρης διαφάνεια).

Κατασκευάσαμε μια νέα μέθοδο adjustTransparency, η οποία μειώνει την ορατότητα από την μέγιστη τιμή της (255) κατά μία μονάδα σε κάθε Act. Τη νέα τιμή transparency που υπολογίζει την εφαρμόζει στην εικόνα της μορφής star χρησιμοποιώντας την εντολή: getImage().setTransparency(transparency) αφού πρώτα εξασφαλιστεί ότι η τιμή δεν είναι μικρότερη του μηδενός. Το Greenfoot δεν δέχεται αρνητική διαφάνεια και θα προκύψει πρόβλημα αν δεν κάνουμε αυτόν τον έλεγχο. Τέλος, για αυτή την άσκηση προγραμματίζουμε το αστεράκι να εξαφανίζεται όταν πατιέται με το ποντίκι και όχι να αλλάζει θέση.

Kώδικας 10.1:

    private static int score = 0;
    private int transparency = 255;
    public void act() 
    {
        // Add your action code here.

        if (Greenfoot.mouseClicked(this)){
			getWorld().removeObject(this);
            score += 1;
        }
        adjustTransparency();
    }
    private void adjustTransparency(){
        getImage().setTransparency(transparency);
        if (transparency <=0)
        {
            transparency = 0;
        }
        else
        {transparency = transparency - 1;
        }
    }
	
    public static int getScore()
    {
        return score;
    }

Δοκιμάστε να προσθέσετε περισσότερα αστέρια με την εντολή addObject και δείτε τι συμβαίνει. Όλα τα αστέρια εμφανίζονται και εξαφανίζονται μαζί. Καλό θα ήταν να εμφανίζονται αστέρια σε συγκεκριμένα χρονικά διαστήματα (π.χ. κάθε 50 κύκλους Act). Εφόσον η εντολή addObject ανήκει στην κλάση World μπορούμε να εισάγουμε αυτόν τον κώδικα στην υποκλάση space του κόσμου World. Θα ορίσουμε μάλιστα και μια συνάρτηση Act() μέσα στην υποκλάση space για να εκτελείται κάθε φορά που γίνεται Run.

Kώδικας 10.2:

private int numOfFrames = 50;
public void act()
{
   int width = getWidth();
   int height = getHeight();
   numOfFrames--;
   if (numOfFrames == 0)
   {addObject(new star(),Greenfoot.getRandomNumber(width),Greenfoot.getRandomNumber(height));
    numOfFrames = 50;
   }
}

Επέκταση 10.1:

Εισάγετε έναν νέο τύπο αντικειμένων και δώστε την ίδια λειτουργία με τα αντικείμενα star. Προσπαθήστε να κάνετε το παιχνίδι πιο εύκολο ή πιο δύσκολο αλλάζοντας το πόσο συχνά εμφανίζονται τα αντικείμενα αυτά στην οθόνη. (Δεν χρειάζεται να αλλάζει το σκορ κάθε φορά που ο χρήστης πατάει το νέο αντικείμενο που θα εισάγετε).

comments powered by Disqus