Domanda

Dopo qualche ritocco di un certo codice che ho ricevuto da qualcuno per causare un personaggio immagini di muoversi per quanto riguarda la sua direzione e fino all'ingresso a destra in basso a sinistra ho messo questo insieme: (spero che il codice non è troppo disordinato)

carattere Spostare Codice + IMG

Il foglio di Sprite viene eseguito solo nel senso della lunghezza, in modo sostanzialmente ogni sezione sprite è un'azione diversa. Ora ci sarebbe un modo ho potuto fare un codice che funziona con la corrente di uno a ciclo giù da un 'azione' insieme per fare un'animazione?

Ad esempio: 'Run Sinistra' è sprite 3. Così, poi dopo si designa quella colonna sarebbe possibile anello verso il basso come mai molti fotogrammi dell'animazione corsa (diciamo 4) al fine di rendere un'animazione?

Immagine di esempio: alt text href="http://animania1.ca/ShowFriends/dev/example.jpg" rel="nofollow noreferrer"> http://animania1.ca/ShowFriends/dev/ example.jpg

È stato utile?

Soluzione

Dovrebbe essere facile.

Se si registra il numero di frame in una variabile, è possibile con modulo questo con il numero di fotogrammi è necessario ottenere un numero di frame di animazione da visualizzare.

frame_count = 0
animation_frames = 4
while quit == False:
    # ...
    # snip
    # ...
    area = pygame.Rect(
        image_number * 100,
        (frame_count % animation_frames) * 150,
        100,
        150
    )
    display.blit(sprite, sprite_pos, area)
    pygame.display.flip()
    frame_count += 1

Se le azioni diversi hanno un diverso numero di fotogrammi, dovrete aggiornare animation_frames quando si aggiorna image_number.

Inoltre, questo presuppone che è ok per riprodurre l'animazione a partire da qualsiasi telaio. Se questo non è il caso, è necessario registrare ciò che il conteggio dei fotogrammi è stato quando l'azione iniziata, e prendere questo lontano dal conteggio dei fotogrammi prima che il modulo:

    area = pygame.Rect(
        image_number * 100,
        ((frame_count - action_start_frame) % animation_frames) * 150,
        100,
        150
    )

Una nota sulla tua gestione degli eventi. Se si tiene premuto, per esempio, a sinistra, a destra e toccare, ma tenere premuto sinistra, lo sprite si ferma perché l'ultimo evento si elabora era un evento keyup, nonostante il fatto che sto ancora in mano lasciato.

Se questo non è quello che si vuole è, si può andare in giro facendo sia tenere un registro degli stati su / giù dei tasti che vi interessano, oppure utilizzando il pygame.key.get_pressed interfaccia.

In un'altra nota, in cui sembra essere l'obiettivo di un frame rate fisso, e allo stesso tempo determinare fino a che punto per spostare il vostro sprite in base al tempo impiegato nel l'ultimo fotogramma. A mio parere, questo probabilmente non è l'ideale.

2D giochi d'azione in genere bisogno di lavorare in modo prevedibile. Se alcuni CPU processo pesante inizia in background sul vostro computer e fa sì che il gioco per essere più in grado di sfornare 60 fotogrammi al secondo, è probabilmente preferibile a rallentare, piuttosto che avere i vostri oggetti iniziano a saltare enormi distanze tra i fotogrammi. Immaginate se questo è accaduto in un gioco d'azione 2D come Metal Slug dove stai dover saltare evitando i proiettili?

Questo rende anche tutti i calcoli di fisica molto più semplice. Dovrete effettuare una chiamata in giudizio in base al tipo di gioco che è.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top