• Programmazione Android
  • CORSI ONLINE
  • Web Agency

Logo

Corsi di programmazione web e mobile online
Navigation
  • Home
  • CORSI ONLINE
  • Tutorial Pratici
  • GUIDE COMPLETE
    • Corso completo di C
    • Corso videogame con Cocos2d
    • Programmazione Cocoa Touch
  • Sezioni
    • Libri e manuali
    • Tips & Tricks
    • Risorse utili
    • Strumenti di Sviluppo
    • Materiale OpenSource
    • Framework
    • Guide Teoriche
    • Guide varie
    • Grafica e Design
    • iPad
    • News
    • Video Tutorial
    • Windows Phone
  • Pubblicità
  • About
    • Chi siamo
    • Pubblicazioni
    • Collabora
    • Sostieni devAPP

T#026 – Creiamo un’Animazione di una Palla con un NSTimer (by iCodeBlog)

By bebus77 | on 1 Marzo 2010 | 8 Comments
Senza categoria

Ancora una volta ringraziamo il Team di iCodeBlog che ci ha concesso di tradurre e proporre ai nostri utenti i suoi tutorial e le sue guide. In questo nuovo tutorial, di brandontreb, vedremo come creare una semplice applicazione in cui una palla si muoverà automaticamente e “liberamente” in tutto lo schermo del vostro iPhone, rimbalzando sui lati. Per creare quest’animazione utilizzeremo un’immagine e un oggetto NSTimer. Tutto ciò potrebbe tornare sicuramente utile soprattutto nello sviluppo di giochi, infatti questa è una caratteristica principale di famosi giochini che sono passati alla storia, come “Pong” o “Hockey da Tavolo” (Air Hockey).

Partiamo aprendo Xcode e creando un nuovo progetto. Dall’elenco dei template disponibili scegliamo “View-based Application” e proseguiamo. Diamo ora un nome alla nostra applicazione, ad esempio “Palla”, scegliamo la posizione dove salvare il progetto e andiamo avanti.

Per questo tutorial avrete bisogno di un’immagine in formato .png preferibilmente avente forma circolare, per simulare la presenza di una palla. Io ne ho creata una con il logo di devAPP.it potete scaricarla (tasto destro > “Salva Immagine con Nome….”) oppure potete creare una vostra come meglio credete:



Una volta scaricata o creata l’immagine della palla, trascinatela nella cartella “Resources” del vostro progetto in Xcode, facendo attenzione di mettere la spunta nell’opzione “Copy items into destination’s group folder (if needed)”



Adesso l’immagine è parte del nostro progetto. Clicchiamo sul file “PallaViewController.h” ed andiamo a scrivere un po’ di codice. Dichiariamo un oggetto di tipo UIImageView e un oggetto di tipo CGPoint, che useremo per decidere di quanto si dovrà muovere la nostra palla (se vogliamo una sorta di velocità), infine, dichiariamo la solita @property:

#import 

@interface PallaViewController : UIViewController {	
	IBOutlet UIImageView *palla;
	CGPoint pos;
}

@property (nonatomic,retain) IBOutlet UIImageView *palla;

@end

Salviamo il file .h e andiamo a costruire la nostra semplice interfaccia grafica con Interface Builder. Clicchiamo quindi due volte su “PallaViewController.xib” e si aprirà IB. Ecco la nostra vista principale. Dentro di essa trasciniamo semplicemente una ImageView dalla Library (se non la vedete cliccate in alto su Tools > Library).

Ridimensioniamo l’ ImageView e clicchiamoci sopra. Apriamo quindi l’Attributes Inspector (Tools > Attribute Inspector) e nel campo image, apriamo la selezione multipla a tendina e scegliamo la nostra immagine dall’elenco “palla.png” (o eventualmente il nome che avete dato alla vostra palla caricata in precedenza).

In questo modo apparirà nell’ImageView proprio l’immagine della palla che avete incluso prima nel progetto.



A questo punto, sempre selezionando l’ImageView, clicchiamo contemporaneamente sulla nostra tastiera: Command e = (CMD + =) e i bordi dell’ImageView si allineeranno perfettamente alla palla. Potete benissimo abbellire la vista con molti elementi, ma noi cambieremo solo il colore di sfondo mettendo un Blu Oceano (per far ciò selezionate la vista, cliccate su Attributes Inspector e cliccate accanto a Background)



Ora dobbiamo collegare l’immagine a ciò che abbiamo dichiarato via codice. Clicchiamo quindi su “File’s Owner”, spostiamoci nel Connections Inspector e colleghiamo l’oggetto “palla” all’ImageView



Per quanto riguarda l’interfaccia grafica abbiamo finito, salviamo tutto e chiudiamo Interface Builder. Apriamo ora il file “PallaViewController.m” e aggiungiamo il solito “@synthesize” in questo caso per l’oggetto “palla”.

Scommentiamo il metodo “viewDidLoad” e modifichiamo il suo codice come segue:

- (void)viewDidLoad {
        pos = CGPointMake(14.0, 7.0);
        [NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(onTimer) userInfo:nil repeats:YES];
}

Nella prima linea, settiamo i valori per l’oggetto pos. Più questi saranno alti, maggiore sarà lo spostamento della palla (vedremo dopo perchè). Ovviamente questi valori indicheranno anche il modo in cui si muoverà la nostra palla, in questo caso in modo obliquo. Successivamente creiamo un oggetto NSTimer, settiamo il suo metodo “scheduledTimerWithTimeInterval” a 0.05, che indica la velocità con cui si aggiorna costantemente il Timer e, grazie al parametro “selector”, diciamo al nostro Timer quale metodo richiamare ad ogni intervallo di tempo trascorso, nel nostro caso “onTimer”:

- (void) onTimer {
	palla.center = CGPointMake(palla.center.x+pos.x, palla.center.y+pos.y);
	
	if(palla.center.x > 320 || palla.center.x < 0)
              pos.x = -pos.x;
        if(palla.center.y > 460 || palla.center.y < 0)
	      pos.y = -pos.y;
}

Ecco cosa succede. Ad ogni chiamata di questo metodo (onTimer), alla posizione della palla verranno aggiunti i valori settati in pos, quindi la palla si sposterà di quei valori (x,y) indicati. Verrà quindi verificato se la palla, con questo movimento, ha "rimbalzato contro le pareti" dell'iPhone. Se questo dovesse accadere, verranno invertiti i valori della x e rispettivamente della y così da far andare la palla nella direzione opposta, senza uscire quindi dallo schermo.

Per quanto riguarda il codice è tutto, clicchiamo su "Build And Run" e testiamo la nostra applicazione sul Simulatore, l'applicazione in esecuzione farà capire molto meglio quello di cui stiamo parlando. Ecco uno screenshot dell'applicazioni in esecuzione:



Tutorial tradotto da David Pollak (bebus77) per devAPP.it.

Share this story:
  • tweet

Tags: animazioniicodeblogNSTimerObjective-ctutorialTutorial PraticiXcode

Recent Posts

  • Parte il percorso programmatori iOS in Swift su devACADEMY.it

    20 Dicembre 2017 - 0 Comment
  • Android, crittografare dati velocemente con Encryption

    24 Settembre 2018 - 0 Comment
  • Sql2o, accesso immediato ai database tramite Java

    3 Settembre 2018 - 0 Comment
  • Okio, libreria per ottimizzare l’input/output in Java

    27 Agosto 2018 - 0 Comment

Related Posts

  • Con Xcode 6.3 arriva il Crash Log Organizer

    26 Febbraio 2015 - 0 Comment
  • Xcode-project-generator: uno script per creare velocemente progetti Xcode

    21 Ottobre 2014 - 1 Comment
  • Xcode Tips & Tricks: Gestione del filesystem, un progetto più versioni, plugin

    12 Novembre 2013 - 4 Comments

Author Description

Giovane sviluppatore iOS e Web. Mobile Development Director at eveonplay.

8 Responses to “T#026 – Creiamo un’Animazione di una Palla con un NSTimer (by iCodeBlog)”

  1. 1 Marzo 2010

    Eros Brienza

    Ottimo tutorial, può essere la base per molte idee.

  2. 2 Marzo 2010

    Monk

    Tutorial interessante bravi

  3. 3 Marzo 2010

    aaddii

    a me intereserebbe molto di fare una ap tipo ilTempo per sfogliare insomma, ce qualche remota possibilita di un tutorial simile?

  4. 21 Aprile 2010

    Ste87

    Ciao sono un novellino della programmazione e sto seguendo il tuo tutorial per cercare di capire qls, ho seguito tutto, lanciato la simulazione, ma l’applicazione palla si apre e crasha subito.
    In pallaViewController.m mi esce un warning, ma non riesco a capire come metterlo a posto, mi potresti aiutare?

    Mi dice che non riesce a collegare il selector con l’onTimer.

    Ti copio cosa ho scritto come codice:

    – (void)viewDidLoad {
    pos = CGPointMake(14.0, 7.0);
    [NSTimer scheduledTimerWithTimeInterval:0.05 target:self selctor:@selector(onTimer) userInfo:nil repeats:YES];
    }

    – (void)onTimer {
    palla.center = CGPointMake(palla.center.x+pos.x, palla.center.y+pos.y);

    if(palla.center.x > 320 || palla.center.x 460 || palla.center.y < 0)
    pos.y = -pos.y;
    }

    Grazie dell'aiuto!!

  5. 21 Aprile 2010

    Neo

    Non so cosa tu voglia fare esattamente, ma di sicuro c’è un errore nella condizione del tuo if:

    (palla.center.x > 320 || palla.center.x 460 || palla.center.y < 0) e nello specifico “palla.center.x 460” non vuol dire nulla così.. prova a mettere > 460 oppure < 460 o quello che serve a te 🙂

  6. 21 Aprile 2010

    Ste87

    Che stupido, non avevo notato.
    Grazie mille della pronta risposta.

    Ciao ciao

  7. 2 Novembre 2010

    was

    Ciao grandi!
    ottimo tutorial, come sempre peraltro, perdonate la mia niubbaggine, ma cosa aggiungere se volessi abilitare anche la modalità landscape?!
    con i metodi sopra mi rimane sempre in portrait il movimento…

  8. 9 Giugno 2011

    MaveDev

    Altro grande tutorial, molto interessante e di certo la base per altre idee da sviluppare 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *


*
*

Corso online di programmazione android e java

SEZIONI

  • Android
  • Comunicazioni
  • Contest
  • Corsi ed Eventi
  • Corso completo di C
  • Corso programmazione videogiochi
  • Framework
  • Grafica e Design
  • Guida rapida alla programmazione Cocoa Touch
  • Guide Teoriche
  • Guide varie
  • iPad
  • Le nostre applicazioni
  • Libri e manuali
  • Materiale OpenSource
  • News
  • Pillole di C++
  • Progetti completi
  • Risorse utili
  • Strumenti di Sviluppo
  • Swift
  • Tips & Tricks
  • Tutorial Pratici
  • Video Tutorial
  • Windows Phone

Siti Amici

  • Adrirobot
  • Allmobileworld
  • Apple Notizie
  • Apple Tribù
  • Avvocato360
  • Blog informatico 360°
  • bubi devs
  • fotogriPhone
  • GiovaTech
  • iApp-Mac
  • iOS Developer Program
  • iPodMania
  • MelaRumors
  • Meritocracy
  • SoloTablet
  • TecnoUser
  • Privacy & Cookie Policy
©2009-2018 devAPP - All Rights Reserved | Contattaci
devAPP.it è un progetto di DEVAPP S.R.L. - Web & Mobile Agency di Torino
Str. Volpiano, 54 - 10040 Leini (TO) - C.F. e P.IVA 11263180017 - REA TO1199665 - Cap. Soc. € 10.000,00 i.v.

devACADEMY.it

Vuoi imparare a programmare?

Iscriviti e accedi a TUTTI i corsi con un’unica iscrizione.
Oltre 70 corsi e migliaia di videolezioni online e in italiano a tua disposizione.

ISCRIVITI SUBITO