Rzuć w stylu dzięki tej DIY elektronicznej matrycy D20

Rzuć w stylu dzięki tej DIY elektronicznej matrycy D20

Chcesz czegoś wyjątkowego do swojej następnej gry fabularnej? Co powiesz na elektroniczny D20 z niestandardową grafiką dla trafień krytycznych i pudeł? Dzisiaj pokażę wam jak zbudować własny z Arduino i kilkoma prostymi częściami.





Nie martw się, jeśli nigdy wcześniej nie używałeś Arduino, mamy Przewodnik wprowadzający .





Plan budowy

To prosty projekt. Arduino będzie sterować wyświetlaczem OLED, a przycisk rzuci kostką. Niestandardowa grafika będzie wyświetlana dla rzutów na trafienie krytyczne lub pudło krytyczne. Możesz łatwo zmienić kod na D8, D10 lub D12.





Czego potrzebujesz

  • 1 x Arduino
  • 1x0,96 ' Wyświetlacz OLED I2C
  • 1 x przycisk
  • 1x10 tys. Rezystor
  • 1 x deska do krojenia chleba
  • Różne przewody do podłączenia
  • Pełny kod tutaj, jeśli nie chcesz postępować zgodnie z pisemnymi instrukcjami.

To są podstawowe części potrzebne do zbudowania własnego D20. Możesz zainstalować go w obudowie (omówionej poniżej) i przylutować obwód do bardziej trwałego stanu. Oto dodatkowe części, które będziesz potrzebować, aby to zrobić:

  • 4 śruby M2 x 10 mm (0,4 cala)
  • 4 x nakrętki M2
  • Podkładki 4x7mm (0.28 cala)
  • Zatrzask baterii 9V (lub odpowiednia alternatywa)
  • Różne rurki termokurczliwe

Te wyświetlacze OLED są bardzo fajne. Zazwyczaj można je kupić w kolorze białym, niebieskim, żółtym lub mieszance tych trzech. Kupiłem jeden w kolorze niebieskim, aby pasował do mojego przypadku. Upewnij się, że masz I2C model zamiast SPI .



Prawie każde Arduino będzie odpowiednie. Wybrałem Nano, ponieważ są na tyle małe, że mieszczą się w etui. Sprawdź nasz przewodnik zakupu, aby uzyskać więcej informacji na temat modeli Arduino.

Obwód

Oto obwód, którego potrzebujesz:





Łączyć VCC oraz GND na wyświetlaczu OLED do Arduino +5V oraz grunt . Łączyć analogowy 4 na Arduino do oznaczonego pinu SDA . Łączyć analogowy 5 do SCL Szpilka. Te piny zawierają obwody potrzebne do sterowania wyświetlaczem za pomocą magistrali I2C. Dokładne piny będą się różnić w zależności od modelu, ale A4 i A5 są używane w Nano i Uno. Sprawdź Dokumentacja biblioteki przewodów dla swojego modelu, jeśli nie używasz Uno lub Nano.

Podłącz akumulator do uziemienia, a WINO Szpilka. Oznacza to napięcie wejściowe i akceptuje różne napięcia prądu stałego – ale najpierw sprawdź swój model, który czasami może się nieznacznie różnić.





Podłącz przycisk do pin cyfrowy 2 . Zauważ, jak 10k? rezystor jest podłączony do masy. To jest bardzo ważne! Jest to znane jako rezystor obniżający i zapobiega wykrywaniu przez Arduino fałszywych danych lub zakłóceń po naciśnięciu przycisku. Służy również do ochrony tablicy. Gdyby ten rezystor nie był używany, +5V poszłoby prosto do ziemi. Jest to znane jako martwy krótki i jest łatwym sposobem na zabicie Arduino.

Jeśli lutujesz ten obwód, zabezpiecz połączenia za pomocą rurek termokurczliwych:

Upewnij się, że nie nagrzewasz go zbyt mocno i rób to dopiero po upewnieniu się, że obwód działa. Możesz także skręcić kable w pary. Dzięki temu są schludne i chronią je przed nadmiernym stresem:

Test przycisku

Teraz, gdy zbudowałeś obwód, prześlij ten kod testowy (upewnij się, że wybrałeś właściwą płytkę i port z Narzędzia > Tablica oraz Narzędzia > Port menu):

const int buttonPin = 2; // the number of the button pin
void setup() {
pinMode(buttonPin, INPUT); // setup button
Serial.begin(9600); // setup serial
}
void loop(){
if(digitalRead(buttonPin) == HIGH) {
Serial.print('It Works');
delay(250);
}
}

Po przesłaniu pozostaw Arduino podłączone przez USB i otwórz monitor szeregowy ( U góry po prawej > Monitor szeregowy ). Powinieneś zobaczyć słowa To działa pojawiają się po każdym naciśnięciu przycisku.

Jeśli nic się nie dzieje, idź i sprawdź ponownie swój obwód.

Konfiguracja OLED

Aby sterować wyświetlaczem, musisz zainstalować dwie biblioteki. Pobierz Adafruit_SSD1306 oraz biblioteki Adafruit-GFX [No Longer Available] z Github i zapisz je w swoim folderze biblioteki. Jeśli nie masz pewności, gdzie znajdują się foldery biblioteki, przeczytaj mój samouczek dotyczący gier retro , w którym konfiguruję ten sam wyświetlacz bardziej szczegółowo.

Uruchom ponownie Arduino IDE i prześlij szkic testowy z Plik > Przykłady menu. Wybierz Adafruit SSD1306 i wtedy ssd1306_128x64_i2c . Prześlij ten kod (potrwa to chwilę), a na wyświetlaczu powinieneś zobaczyć wiele kształtów i wzorów:

Jeśli nic się nie dzieje, sprawdź połączenia. Jeśli po sprawdzeniu nadal nie będzie działać, będziesz musiał zmodyfikować przykładowy kod.

zegarek Samsung 3 vs aktywny 2

Zmień tę linię (na początku Ustawiać funkcjonować):

display.begin(SSD1306_SWITCHCAPVCC, 0x3D);

Do tego:

display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

Dzięki temu biblioteka zawiera szczegółowe informacje dotyczące używanego wyświetlacza. Teraz powinieneś być gotowy do kontynuowania kompilacji.

Walizka

Jeśli budujesz to na płytce prototypowej lub nie chcesz go pakować, możesz pominąć ten krok.

Zaprojektowałem i wydrukowałem to pudełko. Pobierz pliki na Rzeczoświata . Nie martw się, jeśli nie masz drukarki 3D – usługi online Koncentratory 3D oraz Kształty świadczyć usługi drukowania online.

Możesz łatwo zrobić to pudełko z drewna lub kupując plastik pole projektu .

Pokrywka ma prostą konstrukcję na wcisk i zawiera kilka wycięć na sprzęt:

Kod

Teraz, gdy wszystko jest gotowe, czas na kod. Oto jak to będzie działać w Pseudo kod :

if button is pressed
generate random number
if random number is 20
show graphic
else if random number is 1
show graphic
else
show number

Aby to zadziałało poprawnie, musi zostać wygenerowana losowa liczba - jest to rzut kostką. Arduino ma generator liczb losowych o nazwie losowy , ale nie należy go używać. Chociaż jest wystarczająco dobry do podstawowych zadań losowych, po prostu nie jest wystarczająco losowy na elektroniczną kość. Powody są dość skomplikowane, ale jeśli jesteś zainteresowany, możesz przeczytać więcej na bollen.com .

Pobierz Prawdziwy losowy biblioteka autorstwa sirleech na Github. Dodaj to do folderu biblioteki i uruchom ponownie IDE.

Teraz utwórz nowy plik i skonfiguruj swój początkowy kod (lub po prostu pobierz gotowy kod z GitHub):

#include
#include
#include
#include
#include
Adafruit_SSD1306 display(4);
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // setup the OLED
pinMode(buttonPin, INPUT); // setup button
}
void loop() {

}

Ten kod konfiguruje OLED i zawiera wszystkie biblioteki potrzebne do komunikacji z nim, wraz z nową biblioteką liczb losowych. Teraz dodaj to do głównej pętli:

if(digitalRead(buttonPin) == HIGH) {
delay(15);
if(digitalRead(buttonPin) == HIGH) {
display.fillScreen(BLACK); // erase the whole display
display.setTextColor(WHITE);
display.setTextSize(2);
display.setCursor(0, 0);
display.println(TrueRandom.random(1, 21)); // print random number
display.display(); // write to display
delay(100);
}
}

W tej chwili jest to dość podstawowe, ale jest to działający D20. Po każdym naciśnięciu przycisku na ekranie pojawia się losowa liczba od 1 do 20:

Działa to dobrze, ale jest trochę nudne. Zróbmy to lepiej. Stwórz dwie nowe metody, DrawDie oraz wymazaćDie :

void drawDie() {
display.drawRect(32, 0, 64, 64, WHITE);
}

Te narysują kostkę na środku ekranu. Możesz chcieć to bardziej skomplikować, na przykład rysując K20 lub K12 i tak dalej, ale prościej jest narysować podstawową kostkę sześciościenną. Oto podstawowe zastosowanie:

drawDie();

Następnie zmodyfikuj swoją główną pętlę, aby losować liczbę, tylko większą i pośrodku. Zmień rozmiar tekstu i kursor na to:

display.setTextColor(WHITE);
display.setCursor(57, 21);

Teraz wygląda znacznie lepiej:

Jedyny problem dotyczy liczb większych niż dziewięć:

Rozwiązanie tego jest proste. Wszelkie liczby mniejsze niż 10 będą miały kursor ustawiony w innej pozycji niż liczby 10 lub większe. Zastąp ten wiersz:

zainicjuj nowe okna dysku twardego 10
display.setCursor(57, 21);

Z tym:

int roll = TrueRandom.random(1, 21); // store the random number
if (roll <10) {
// single character number
display.setCursor(57, 21);
}
else {
// dual character number
display.setCursor(47, 21);
}

Oto jak to wygląda teraz:

Wszystko, co pozostało, to obrazy, gdy wyrzucisz krytyczne trafienie lub pudło. W grę wchodzi kilka kroków, ale jest to dość prosty proces.

Znajdź odpowiedni obraz, którego chcesz użyć (im prostszy, tym lepszy, ponieważ wyświetlacz jest tylko w jednym kolorze). Oto obrazy, których użyłem:

Źródło obrazu: publicdomainvectors.org

Każdy obraz, którego chcesz użyć, będzie musiał zostać przekonwertowany na tablicę HEX. To jest reprezentacja obrazu w formie kodu. Dostępnych jest wiele narzędzi, które to umożliwiają, a niektóre są napisane specjalnie dla wyświetlaczy OLED. Najprostszym sposobem jest użycie PicturetoC_Hex narzędzie online. Oto potrzebne ustawienia:

jaka aplikacja ma najwięcej pobrań

Prześlij swój obraz i ustaw format kodu na Szesnastkowy: 0x . Ustawić Używany do do Czarno-biały dla wszystkich funkcji rysowania obrazu . Wszystkie pozostałe opcje pozostaw jako domyślne. W razie potrzeby możesz zmienić rozmiar obrazu. naciskać Pobierz ciąg C i powinieneś zobaczyć dane obrazu:

Wygenerowane dane będą potrzebne za minutę. Utwórz dwie funkcje o nazwie DrawExplosion oraz drawSkull (lub odpowiednią nazwę dla Twojej wersji). Oto kod:

void drawExplosion() {
// store image in EEPROM
static const unsigned char PROGMEM imExp[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x78,0x7f,0xff,0xc0,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xf0,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xfb,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x07,0xff,0xff,0xf9,0xff,0xd8,0x00,0x00,0x00,0x3f,0xff,0xf0,0x0f,0x00,0x00,0x00,0x00,0x1f,0x1f,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x01,0xbf,0xff,0xff,0xff,0x30,0x00,0x00,0x00,0x13,0xf7,0xb8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
display.drawBitmap(0, 0, imExp, 64, 62, 1); // draw mushroom cloud
}
void drawSkull() {
// store image in EEPROM
static const unsigned char PROGMEM imSku[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x78,0x00,0x07,0xf0,0x00,0x00,0x00,0x00,0xfc,0x00,0x07,0xf8,0x00,0x00,0x00,0x00,0xfe,0x00,0x07,0xf8,0x00,0x00,0x00,0x01,0xfe,0x00,0x07,0xfc,0x00,0x00,0x00,0x01,0xfe,0x00,0x07,0xfe,0x00,0x3f,0xc0,0x03,0xfe,0x00,0x01,0xff,0x81,0xff,0xfc,0x07,0xec,0x00,0x00,0x3f,0xc7,0xff,0xff,0x1f,0xc0,0x00,0x00,0x0f,0xcf,0xff,0xff,0xdf,0x00,0x00,0x00,0x07,0xbf,0xff,0xff,0xee,0x00,0x00,0x00,0x01,0x7f,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x1e,0x3f,0xff,0x3f,0xc7,0x80,0x00,0x00,0x1e,0x0c,0x0f,0x00,0x07,0x80,0x00,0x00,0x1e,0x00,0x0f,0x00,0x0f,0x80,0x00,0x00,0x1e,0x00,0x19,0x80,0x0f,0x00,0x00,0x00,0x0f,0x00,0x19,0x80,0x0f,0x00,0x00,0x00,0x0d,0x00,0x30,0xc0,0x1f,0x00,0x00,0x00,0x05,0x80,0x70,0xc0,0x1e,0x00,0x00,0x00,0x05,0xf0,0xe0,0xe0,0x36,0x00,0x00,0x00,0x01,0xff,0xe0,0x7f,0xf0,0x00,0x00,0x00,0x03,0xff,0xc4,0x7f,0xf0,0x00,0x00,0x00,0x03,0xff,0xcc,0x7f,0xf0,0x00,0x00,0x00,0x03,0xff,0xcc,0x7f,0xf0,0x00,0x00,0x00,0x03,0xff,0x9e,0x7f,0xf0,0x00,0x00,0x00,0x00,0xff,0xfe,0x7f,0xc0,0x00,0x00,0x00,0x00,0x01,0xff,0xf8,0x1c,0x00,0x00,0x00,0x03,0xe0,0x3f,0x01,0xbf,0x00,0x00,0x00,0x07,0xa6,0x40,0x09,0x9f,0x80,0x00,0x00,0x1f,0x27,0x5a,0x39,0x9f,0xf8,0x00,0x01,0xff,0x27,0xdb,0x39,0x0f,0xfc,0x00,0x03,0xfe,0x31,0x7f,0x39,0x07,0xfc,0x00,0x03,0xfc,0x10,0x1a,0x02,0x03,0xf8,0x00,0x03,0xf8,0x10,0x00,0x02,0x01,0xf0,0x00,0x01,0xf8,0x10,0x00,0x02,0x01,0xe0,0x00,0x00,0x78,0x10,0x00,0x02,0x00,0xe0,0x00,0x00,0x70,0x30,0x00,0x02,0x00,0x00,0x00,0x00,0x30,0x20,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x1b,0x00,0x00,0x00,0x00,0x00,0x73,0x55,0x63,0x00,0x00,0x00,0x00,0x00,0xf9,0x55,0x4f,0x00,0x00,0x00,0x00,0x00,0x7f,0x14,0x1f,0x00,0x00,0x00,0x00,0x00,0x1f,0xe0,0xfe,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
display.drawBitmap(0, 0, imSku, 60, 64, 1); // draw skull cloud
}

Jeśli chcesz użyć obrazów, których użyłem, skopiuj kod. Jeśli chcesz użyć własnych obrazów, które wygenerowałeś wcześniej, skopiuj kod bajtowy do imSku oraz imExp tablice zgodnie z wymaganiami.

Oto jak te obrazy wyglądają na wyświetlaczu:

Najważniejszą częścią tego kodu jest ta linia:

static const unsigned char PROGMEM imSku[]

To mówi Arduino, aby przechowywał twoje obrazy w EEPROM ( co to jest EEPROM? ) zamiast pamięci RAM ( szybki przewodnik po pamięci RAM ). Powód tego jest prosty; Arduino ma ograniczoną pamięć RAM, a wykorzystanie jej do przechowywania obrazów może nie pozostawić żadnych pozostałych do wykonania kodu

Zmodyfikuj swój główny Jeśli oświadczenie, aby pokazać te nowe grafiki po wyrzuceniu jednego lub 20. Zwróć uwagę na wiersze kodu, aby pokazać również liczbę obok obrazów:

if(roll == 20) {
drawExplosion();
display.setCursor(80, 21);
display.println('20');
}
else if(roll == 1) {
display.setCursor(24, 21);
display.println('1');
drawSkull();
}
else if (roll <10) {
// single character number
display.setCursor(57, 21);
display.println(roll); // write the roll
drawDie(); // draw the outline
}
else {
// dual character number
display.setCursor(47, 21);
display.println(roll); // write the roll
drawDie(); // draw the outline
}

A oto jak wyglądają te nowe rolki:

To wszystko po stronie kodu (idź pobierz kod z GitHub, jeśli pominąłeś to wszystko). Możesz łatwo zmodyfikować to tak, aby było to D12, D8 i tak dalej.

Montaż końcowy

Teraz, gdy wszystko inne jest skończone, nadszedł czas, aby wszystko spakować. Przykręć wyświetlacz, uważając, aby nie dokręcić śrub zbyt mocno. To jest prawdopodobnie najtrudniejsza część. W ten sposób złamałem wyświetlacz, więc możesz użyć plastikowych podkładek. Wyciąłem kilka kwadracików Plastyk :

Małe nakrętki i śruby mogą być trudne do połączenia. Wskazówka: Użyj małego kawałka Blu-Tack na końcu śrubokręta, aby wstępnie osadzić nakrętki:

Przykręć przycisk, podłącz baterię i zamknij pokrywę. Uważaj, aby nie zakleszczyć żadnych przewodów ani nie związać ich zbyt ciasno, co może spowodować zwarcie. W zależności od długości wleczonych przewodów może być konieczne zabezpieczenie odsłoniętych połączeń izolacją (skrzynka szeregowa działa dobrze):

Oto jak wygląda w środku:

A oto gotowy produkt:

Powinieneś być teraz dumnym posiadaczem elektronicznego D20!

Jakie modyfikacje wprowadziłeś? Czy zmieniłeś obrazy? Daj nam znać w komentarzach, chcielibyśmy zobaczyć, co zrobiłeś!

Udział Udział Ćwierkać E-mail Przewodnik dla początkujących dotyczący animacji mowy

Animowanie mowy może być wyzwaniem. Jeśli jesteś gotowy, aby rozpocząć dodawanie dialogu do swojego projektu, podzielimy ten proces za Ciebie.

Czytaj dalej
Powiązane tematy
  • majsterkowanie
  • Arduino
  • Gra planszowa
  • Elektronika
O autorze Joe Coburn(136 opublikowanych artykułów)

Joe jest absolwentem informatyki na Uniwersytecie w Lincoln w Wielkiej Brytanii. Jest profesjonalnym programistą, a kiedy nie lata dronami ani nie pisze muzyki, często można go spotkać wykonującego zdjęcia lub produkującego filmy.

Więcej od Joe Coburna

Zapisz się do naszego newslettera

Dołącz do naszego newslettera, aby otrzymywać porady techniczne, recenzje, bezpłatne e-booki i ekskluzywne oferty!

Kliknij tutaj, aby zasubskrybować