Could you introduce your app in a few sentences?
A little about me and how I got into programming -
I’m Evan Bacon, online I go by “baconbrix” from when I was a Lego Master Builder or just “Bacon” when I can get it :}. When I was about 16 I took a bible study class, taught by the great Eric Johnson (maker of Canabalt) and Hundreds. I would stalk him and try to learn how to also make dope video games.
I started with Objective-C and SpriteKit / SceneKit. Then, I met Richard Garriott while displaying my Lego models at Rooster Teeth’s RTX. There he told me I should take coding more seriously and shortly after that I got my job as a Design Technologist at Frog Design in Austin, TX.
At Frog I was a native and web prototyper. (Android Studio + Java, Objective-C, Swift, Angular 2, React, React Native, Expo)
As a creative, I really enjoy the speed and performance involved with building Expo apps. I would upload apps in my spare time and tweet them at Expo. After a couple of cool apps, and a DMCA threat from Hipster Whale for my Crossy Road clone!, Charlie Cheever messaged me and asked if I’d want to get paid to keep doing what I was doing! I quit my job, moved to Palo Alto, and it’s been a joy ride ever since. 😁 🙌
Pillar Valley is a dope one-touch arcade game. You play as a slick cylinder and try to line up an orbiting cylinder with the closest adjacent pillar.
You have two tries before your orbiting cylinder shrinks into oblivion. If you miss a platform, the game starts over and you immediately get to try again!
The app is for people who want to make games and know very little about making games. Ideally anyone could see this code and very quickly pivot from it. I wanted to make a game that felt like any other game you would find on the App Store or Play Store. It has some social features that enable you to share screenshots from the game. You can see everyone else who played and their score on a firebase (firestore) leaderboard.
Finally it has a dope sound track and lovely animations that make it feel really cutting edge.
Deployment was easy, I built the whole thing in Expo and was able to utilize the build and deploy workflow they established. It was super quick and easy, it took maybe a half day to deploy both android and iOS. The App was built in roughly 14 hours (or one lonely Saturday) from the comfort of my bed 😴🤤
Built with Expo, Pillar Valley supports Android and iOS, and can be run in the Expo App as well! Being that the game is mostly three.js, it could easily be ported to web as well!
What made you decide to use/switch to React Native?
I wanted to utilize all the deployment and UI features of Expo so I could just focus on making a fun game. I also integrated Firebase which is mildly confusing in Unity. three.js had everything I needed to build a quick, easy, cross-platform experience! The React Native Share API and UI components enabled me to create some nice common features for future games!
How did you transition to React Native?
Previously I made a bunch of games with Expo and three.js On my GitHub you can find the code to my Crossy Road clone, Sunset Cyberspace, Voxel Engine and Nitro Roll.
I started using Expo when I was at Frog. We had a very high-profile client and the app we were building required things that could only be accomplished in a native app. Initially I hadn’t heard of Expo and I built the app in Swift. We would then download native builds onto iPhones, and ship them to our client! This was basically the most stress-inducing experience ever as it was an expensive time-consuming process. I looked far and wide for a solution, and one day stumbled across Expo. This was the only time in my life that I actually thought I was dreaming and couldn’t wake up! Immediately I was able to rewrite our entire native app in Expo and after 2 days we were using Expo everywhere, it completely revolutionized our testing process. The typical testing process would require us to fly multiple teams out to a central location, use a recruiter to find test-subjects, and we would follow a strict set of sprint-cycles to get a stable build on test devices prior to the event. With Expo I could observe users traverse the app, code live fixes, and test alternate UIs.
Have your tried other cross platform technologies before using React Native?
Unity is okay, I’m pretty familiar with it. I don’t really care for the native development experience on Unity, it feels like an afterthought. Building with Expo enabled me to create an experience on my phone live, I could feel if the game was fun or not. When I wanted to test even faster, I could just copy and paste into codepen and use the same code with three.js in the browser!
Even though Ionic isn’t a game platform, I’m out of my mind and tried it anyways! It was simply just too slow and GL doesn’t feel first-class enough. The reload times were inconsistent, bugs were hard to track and no one from the community could help or give any clarity.
SceneKit is not cross-platform but I consider it from time to time. I used to make SceneKit tutorials and so I am fairly versed in that framework. Unfortunately Apple doesn’t seem to really provide the community with enough information about how their engine works or why it’s a strong alternative.
What has your experience been working with React Native in terms of app performance, have you noticed any impacts?
Generally, I found that three.js was fast enough for me. I did build a nice engine layer around three.js to manage geometry and material instances! I used an awesome library called rematch for my redux. This was nice and made performance across components easy to track.
Whenever I had any kind of performance issue I couldn’t solve, I just messaged some people from the community and we got it worked out pretty fast!
Which tools, libraries and frameworks are part of your development process with React Native?
IDE: Snack.expo.io, VSCode, codepen.io
Build tools: EXP. I’m a yarn guy 🤷♀️
Debugging: Just the built in Expo error messages - nothing special
Special libraries?: I have a secret tool I use for indexing my assets for preloading - I’ll probably release this soon.
I’m working on a better game engine for creating games in three.js. This can somewhat be found in the source code.
Also in Pillar Valley you may have noticed that it has features similar to Game Center that utilize Firebase as a backend. This will also be a library so that users can create their own internal ecosystems and connected apps. Because Expo is so easy and fast this will be important to a developers continuity and personal brand! 😁🔥
I’m also using expo-three and gsap.
To generate the screenshots I used an okay software called appure. It resizes the images a little weird but it does the best it can, given how I lazy I am - There is a canny request open to add screenshot support to expo here. 👆Upvote that sucka 😜
What resources have you used to learn React Native? Books, tutorials, courses etc. Anything you can recommend?
Mostly just looking at open source examples and messing around around with them.
I’m a pretty lazy person and so whenever I make an app, I do it using the easiest / simplest solutions. If you are a beginner looking to make games I would definitely look at my Crossy Road clone as it’s very simple to digest. I also have a set a videos on youtube explaining how I made the voxel engine with Expo.
When developing expo-three, a huge thing I consider is trying to make sure that all three.js tutorials can help you learn Expo.
What are some things that you don’t like about React Native or that need to be improved?
We definitely need to have more examples for users to learn and mess with (hence Pillar Valley).
I really love the React Native community, I think that other coding communities have scared people away from being social. Looking at you Xamarin -.-
I would love if the community was bigger and even more inclusive. My most favorite thing to do anymore is to go to the Cheer section of the Expo forums and see everything everyone is making. It gives me a deeper connection to the apps I use. When I know who made a certain app, I always opt to use that over some random application. This has changed my whole smartphone experience and it makes me feel more open and excited to share apps with my friends and family!
Anything else you would like to mention?
I work at Expo where I build fun, interesting apps for the community 💙.
The app is deployed under my personal credential EvanBacon@gmail.com on iOS and Android, and @bacon on Expo.
It has a MIT License so go crazy! 😁😁😁 Tint it green and repost it somewhere ⭐️⭐️⭐️⭐️⭐️.