Jump to content
  • Advertisement

Search the Community

Showing results for tags 'Mobile'.

The search index is currently processing. Current results may not be complete.


More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Categories

  • Audio
    • Music and Sound FX
  • Business
    • Business and Law
    • Career Development
    • Production and Management
  • Game Design
    • Game Design and Theory
    • Writing for Games
    • UX for Games
  • Industry
    • Interviews
    • Event Coverage
  • Programming
    • Artificial Intelligence
    • General and Gameplay Programming
    • Graphics and GPU Programming
    • Engines and Middleware
    • Math and Physics
    • Networking and Multiplayer
  • Visual Arts
  • Archive

Categories

  • Audio
  • Visual Arts
  • Programming
  • Writing

Categories

  • Game Developers Conference
    • GDC 2017
    • GDC 2018
  • Power-Up Digital Games Conference
    • PDGC I: Words of Wisdom
    • PDGC II: The Devs Strike Back
    • PDGC III: Syntax Error

Forums

  • Audio
    • Music and Sound FX
  • Business
    • Games Career Development
    • Production and Management
    • Games Business and Law
  • Game Design
    • Game Design and Theory
    • Writing for Games
  • Programming
    • Artificial Intelligence
    • Engines and Middleware
    • General and Gameplay Programming
    • Graphics and GPU Programming
    • Math and Physics
    • Networking and Multiplayer
  • Visual Arts
    • 2D and 3D Art
    • Critique and Feedback
  • Community
    • GameDev Challenges
    • GDNet+ Member Forum
    • GDNet Lounge
    • GDNet Comments, Suggestions, and Ideas
    • Coding Horrors
    • Your Announcements
    • Hobby Project Classifieds
    • Indie Showcase
    • Article Writing
  • Affiliates
    • NeHe Productions
    • AngelCode
  • Topical
    • Virtual and Augmented Reality
    • News
  • Workshops
    • C# Workshop
    • CPP Workshop
    • Freehand Drawing Workshop
    • Hands-On Interactive Game Development
    • SICP Workshop
    • XNA 4.0 Workshop
  • Archive
    • Topical
    • Affiliates
    • Contests
    • Technical
  • GameDev Challenges's Topics
  • For Beginners's Forum

Calendars

  • Community Calendar
  • Games Industry Events
  • Game Jams
  • GameDev Challenges's Schedule

Blogs

There are no results to display.

There are no results to display.

Product Groups

  • GDNet+
  • Advertisements
  • GameDev Gear

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


About Me


Website


Role


Twitter


Github


Twitch


Steam

Found 771 results

  1. Hi, We're currently looking to recruit a programmer to help us build out the remainder of our game, MATCHINO, for Android and iOS. Matchino is a match-3 game, utilizing elements of poker and casino gaming, in real life cities and towns throughout America. Our team is serious about putting out a polished, professional game. While we learn about the development process (it's been an eye-opener thus far), we also receive a portion of the profit share from in-game purchases and ads (using strategies designed to maximize revenue). Programming-wise we have the following set up: Facebook to accept player logins and store player save data, working game board mechanics, end-game process, startup screen, loading, menu UIs, and first 20 levels complete. We're gearing up to complete a demo for experience testing and for release within the next 2-3 months. We want to move on from this project to develop earth-shattering games, but we knew we needed to start small and gradually work up to that. Everything legal is in order, we're an LLC, we have a website/Facebook presence, contracts, etc. We just need some more help. If you're interested please PM or email me at sam.azzarano@emmersionstudios.com (or visit our website at www.emmersionstudios.com) Thank you!
  2. Codinggamer

    Now Start New Game

    After last game (Quick Calculate It) released, I began start a new game demo. In developing Quick Calculate It , there are some common code can use in next game. So next time I make the game I can do the same thing more quickly. And I can make more content in the same time. And After almost 45 days ( em…did not make game very often, learning instead ), I make this gameplay, just have a look~ It is a pirate game, you play a role kick the pirate. Once you hold down left or right you can change direction or jump. when you jump, your jump height will be different with the time you hold down. Look good ~ Thanks to the art asset publisher. Without his asset it will not looks so good. Of course I add some effect by myself such time-slow and particles. This is a new start, now I could challenge more action in game. I put it to facebook group and reddit. get some feedback such cloud should add and some levels should add. So my next step is add some level to make it more like a game ~ Maybe should add some moving platform and some boss if I could program it.
  3. Geri

    Anime Maker

    Anime Maker is an ultimately simple and but powerfull crossplatform software to create animated cartoons and anime.Download your favorite anime fanworks (characters, backgrounds) from internet, then open them with Anime Maker to create an Anime from them!Anime Maker offers shot based timeline management with 27 image layers, simple BONE ANIMATION for moving your heroes, dozens of effect including fire, water, snowfall, fountain, and refraction. Make your own anime for amatheur or professional movie competitions! Create your own ultimate fanfictions from your favorit anime, impress your friends, create your own anime seasons for televisions, or video sharing sites! Your career as an anime artist starts today! Anime Maker offers all the feature that required to create an anime, including the folowing: - Time-line and shot based video edition with copy/paste/delete abilities - Support for bmp, jpg, png formats with alpha map, and automatic alpha-map generation - 27 independent graphics layer to create your movie - 3 sound channel on the timeline - Wav and ogg files for audio - Mouse and touchscreen for input - AVI video export with antialiasing - x86 and ARM based computers and mobile phones - Windows, Linux and Android compatibility - 8 invididual bones on all layers, with 4 joints each - Real time motion movement recording for realible animation - Dozens of fire and particle effects with your own textures - Layer refraction effects (water waves, etc) - Anime Maker supports multiple CPU cores for great performance - Dedicated mouth speak layer management - More stable than video software usually - Very small memory footprint, and powersaving - Ability to morph, move, resize, color, blend your layers in real-time - WYSIWYG editor: what you see is what you will get on export - Supports cutting exported video into multiple files - Tooltips as easy usage guide - Instant start and quit - Multimedia cacheing to avoid memory waste - 16:9 ratio with custom shot sizes optimized for Anime - Colored and shadowed subtitles download: http://AnimeMaker.tk http://gerigeri.uw.hu/animemaker/index.html
  4. https://play.google.com/store/apps/details?id=com.tileremover_if Tile remover is the mix of classic bubble shooter and falling down block puzzle. Try to remove all tiles from the playground. Colored tiles are falling down one by one in a round and you must place them how the same colors should be alongside. If you make a group of tiles [by at least 3 tiles] from same color then them will be removed. When you skip more than 1 or 2 rounds without making a group then a new line with tiles will appear of the bottom side of playground. Have fun!
  5. Hello All, I know this blog is many days past the usual time I write them and I wish I could say it was for a good reason but unfortunately that is not the case. My wife finally got to come home from the hospital after her surgery last Friday the 10th. However by that Tuesday she had taken a turn for the worse. Her vitals were extremely low, oxygen was just below 80 and her skin was changing color. Per the home nurse and my Primary Care Doctor the best decision would be to get hospice involved. My Wife’s one wish was to be in our home and not in a hospital. This is of course what I am doing for her. My wife is still home and I am taking care of her. Her vitals have improved however she is not eating food. She is however drinking water and going to the bathroom. Hospice gave her only days to live and she has already shown them that was false. My wife is a fighter and the strongest person I have ever met. She is fighting for her life and I will fight with her. Tomorrow I begin conversations with Dr’s on what if anything we can do moving forward to keep her with us and to make sure we looked behind every corner and not missing anything. Right now I am cherishing every moment I can with her even if it’s only watching her sleep. I have not left her side. She is my best friend and my soulmate and if I could I would give up my life for hers. 22 Weeks ago I began this project of working on this video game. The reason why was because of a dream. One night my wife and I were talking about the possible outcome that could happen with her cancer diagnosis. It was a hard conversation but one that was necessary. It was that night I had a dream she had passed away. To cope with death and to honor my wife I had built a video game about her and about cancer. It was played by kids and adults and helped put a smile on the faces that were dealing with the disease. It had also helped myself and my kids cope. When I woke up I was crying. It felt so real. That day I told my wife about my dream and she began to cry. She said however she was happy that in my dream we were able to move on and cope. In my dream the name of the game was Saving our Sarah Cervical Cancer. It was more than a game though it was a group put together to help all women with cervical cancer and men with what their wifes, girlfriends, mothers, etc had to deal with. Also the acronym for Saving Our Sarah is SOS which also an acronym for HELP. So the game is called SOS-CC. Help Cervical Cancer and Saving our Sarah. I decided I did not want to wait to create this. I wanted to create this with Sarah. I wanted her to be involved and I wanted her to see this being done. I wanted her to see the game, to be able to play the game, and for it to become a reality. So we started this together. She gave her input on how she wanted it to look and helped with the creativity. It was fun to do together. I planned on having the game release on September 18th in the Apple IOS store. All along I was trying to finish this game as quickly as I could. I wanted to release the game so that Sarah could see it completed. This may not happen, but at least she helped create it, she got to play it, and she knows it will become reality. The one thing she asked me so far while she has been home is, “You better finish that game and release it!” I promised her that will definitely happen. This game will get finished and it will be updated regularly. This is going to be in honor or my wife. In memory of her and for everyone else that has to deal with the horrors of cancer. I will try and make the Sept 18th release window but it may be delayed. I have not worked on the game since she’s been home as I cannot leave her side. Below is the change log that I got done before she came home. Also below is an almost 2 min video. Please watch and listen to this video. This song has been custom created for Sarah by Dale North. It is the title track of the game. It’s beautiful and Sarah loves it! Thanks Everyone. Completely re-designed and finished Title Menu and all option menus updated all button icons they are now pills with white text, blue text when selected re arranged the buttons on the how to section added random icon to some of the menu screens updated some how to screens re – designed the Store (pharmacy) IAP has a proper icon and description all descriptions are now in the info section of each purchasable item can be accessed by pressing the “I” icon next to the item Added How To areas for: controller navigation store fixed some bugs that were found by play testing Turned on some V-sync to stop some screen tearing from the on screen joystick Created a section in the menu for all the Diary pages you find once found in game they will be unlocked in the menu so you can read them later on, so you can “collect” them all All SFX are now completed and in the game, thanks @LUIS they all sound amazing! adjusted the volume on some SFX Transition screens complete chapter 1 & 2 title and transition screens chapter 2 completion transition screen endless mode transition screen new fireball sprite and destroy animation courtesy of Irina Mir (irmirx) Endless mode is now locked until you complete the game transition displays the highest number of rooms reached in one run always start endless run in the bedroom Your now able to purchase the health and stamina upgrade 3 times (instead of 2) in the store (pharmacy) if you purchase both 3 times you will double your starting health and stamina!! Credits Screen done Once you reach the boss room you can no longer backtrack. Get all the items you need before you enter boss room Made some changes to game over screen added story context text removed main menu button and now it’s tap anywhere to continue lowered health damage of falling in holes to half a heart only hazard that depletes 1 whole heart from Sarah are the spikes Main theme song has been created by Dale North exclusively for this game. It is the most amazing piece of music I have heard and for it to be written for this game and my wife means so much to me. Thank you Dale! Moved diary page to the SOSopedia created a dedicated stats page in SOSopedia now tracks total time played as well as other stats from game over screen resolved a bug where Sarah was not invincible for 1 second after falling into a hole and re-spawning View the full article
  6. Hey All, was hoping I could get some feedback on my game. This is my first attempt and first game to have created. My blog is here: If you would like access to the beta and have an iPad/iphone to give feedback let me know. Game is available on Apple IOS TestFlight. Thank you for taking the time it’s extremely appreciated
  7. A 3D mobile (Andriod) game. Sci Fi setting. Puzzle-platformer. Please, somebody, make a some sort of expertise of visual aspect of the game. Just give me Your opinion. Thanks.))
  8. OfficePassenger

    unusual music

    Dear frends, I would like to try myself as a composer for games, I make unusual music with an unusual mood and atmosphere, I like to work on sounds and details in music, below I attach examples of my works, [deleted by moderator] 1.mp3 2.mp3 3.mp3 4.mp3 5.mp3 6.mp3 7.mp3 8.mp3
  9. Mind Bullet - Stupid Zombies Kill radioactive brain eating vampires with bouncing bullets! Click here https://play.google.com/store/apps/details?id=com.bestsoft32.mindbullets&hl=en
  10. I've created a HTML5 2D canvas game and I'm now ready to take the step and convert it to a native Android (and iOS) app. The game works perfectly fine in any desktop or mobile browser. Animations are fast and smooth. After some research, I decided Cordova was the way to go to create native apps for Android and iOS. My first priority is Android, simply because I have an Android phone myself and I don't have a Mac (which apparently is required to build iOS apps). I have looked at Cocoon.io and although that might be an even better option than Cordova (since it's actually build on top of Cordova), the thing that made me run from it is the fact that it costs $500 just to remove the "build with Cocoon" splash screen... After installing all prerequisites (cordova, Android Studio, nodes.js) building my first APK was easy. When I ran my game in the Android emulator, the game was abysmally slow... Testing it on my device yielded the same slow results. After searching the internet, I figured it was because on some devices, an old and slow WebView is used by native apps to display HTML5 content. Still strange since my phone uses Android 7.0.0 and the emulator uses Android 8.0.0... I quickly found FastCanvas, a PhoneGap/Cordova plugin that adds a very fast canvas "compatible" rendering surface. But it was last updated in 2013 and after trying to get it to work for almost 16 hours straight, I came to the conclusion there's no way to get this to work with the current version of Cordova. I then found CrossWalk-WebView. This too was pretty old and a pain to get it to work with the current version of Cordova. And when I did get it to work, I quickly found out it created a few new problems making my game unplayable (noticeably a strange lag when touching the screen. Not the famous 300ms input lag, but after touching the screen, the entire game would freeze for 200ms-300ms). So I had to give up on Crosswalk as well. So now I am at a loss. Can anyone offer me suggestions on how to speed up canvas rendering in Cordova? It's pretty darn frustrating that my HTML5 game is finished and I'm ready for publication, only to find out that's not as easy everyone says it is... (BTW, I've posted the same question on a few other forums to reach as many game developers as possible.)
  11. Hi, I want to present my game called "Stick Bunny" – arrcade game in which you have to help Bunny to go from one platform to another. Download from here: https://play.google.com/store/apps/details?id=com.threemgames.stickbunny Youtube video gameplay: Funny Bunny wants to go from one platform to another. Use stick and help Bunny. Stick can increase the length. Be careful, if the stick is too long Bunny will be knocked and if it is too short Bunny will fall down. Try to go as far as you can. Collect carrots and exchane them for new characters of Bunny. Tap the screen to change size of the stick. Are you ready to reach 100 platforms or mayby you want to go even farther? So tap the screen, join platforms with sticks, and collect carrots. It is FREE! I am waiting for your comments. Please, give me feedback. If you notice any bugs please tell me. Thanks !
  12. Originally posted on Medium In April 2018 I received a gift from Google Ads (aka AdWords) — 2000 rubles (~30$) to spend for my Totem Spirits game advertising. In this article I want to share some statistics and overall impressions of this platform. First of all let me tell you that 30$ for advertising is not really ‘a lot of money’ so I didn’t expect it to give the game any significant boost on the market. But the end result was slightly better than I anticipated. While configuring an ad camping I set the budget to ~0.8$\day expecting it to last one and a half months. Actual campaign was active for almost 4 months. As targeting countries I chose the top 5 countries downloading the game: India, Ukraine, Russia, US and Germany. The interface of the Google Ads platform is rather intuitive. I wrote rather since it takes some time to find where to press and what is behind all of those statistics and rates. But I can see its improvement over the old AdWords version. Now it’s time to dive deeper into statistics and numbers. At the next graph we can see the overview of the whole campaign: One point represents stats for the whole week There are two impressions\clicks peaks: week of April 9 and May 7 (I have no clue why). Overall, the campaign is rather linear with ~2500 impressions\~70 clicks per week starting from the peak of May 7 slowly increasing to ~38000 impressions\~500 clicks towards the end. At the next graph we can see the conversion stats: 1$ is roughly 62 rubles at this very moment The cost of one conversion is just 9 cents! Conversion rate is 7.84% which is actually quite high for the industry. Now let’s look into Google Play Console stats: Google Play Console Installs stats As we can see the numbers match: 365 installs with top 18 installs per day several times. Unfortunately, no other relevant statistics can be gathered from Console, since there were no ratings\purchases :( So far the promotion of the game is the hardest part in the whole Game Development process (see my previous article about games promotion for free). And paid advertising seems like a right way to go on. In the end I’d like to quote Mark Twain:
  13. Ruslan Sibgatullin

    Seven Tips for Starting Game Developers

    Originally posted on Medium Well, it’s been a ride. My first game Totem Spirits is now live. I’m not gonna tell you how awesome the game is (since you may try it yourself :) ). Instead I want to share my own experience as a developer and highlight some useful tips for those interested in game development. First of all, short background information about myself — I’m 26 now and have about 22 years of a game playing experience (yes, that’s right the first games I played at age 3–4, one of them was Age of Empires) and slightly more than three years of professional career as a Java developer. Alright, let’s dive into the topic itself now. There are seven tips I’ve discovered while creating the game: 1. The team is the main asset. Yes, even the smallest game dev studios have a team of a few people. I literally give a standing ovation to those guys who are able to create a whole game product only by themselves (I know only one example of such). In my team there were one artist, one UX-designer\artist, one sound designer, and myself — programmer\game designer\UX-designer. And here comes the first tip: you should tip 1: Delegate the work you are not qualified in to the professionals. Just a few examples why: Firstly, I tried to find the sounds myself, spent a few days on it and ended up with a terrible mix of unsuitable and poorly created sound samples. Then, I found a guy who made a great set of sounds for less than $15. The first version of promo video was, well, horrible, because I thought I’m quite good at it. Fortunately, I met an UX-designer who made this cool version you may find at the beginning of this post. I can see now why there are so many, let’s say, strange-looking games with horrible art assets and unlistenable music. Well, you just can’t have the same level of professionalism in everything. 2. Game development is not free. You would have to spend your time or\and your money. I mean, if you want to create a good-looking and playable product you need to invest in it. To be honest, I think that not each and every product out there in the markets can be called a “Game”, since many of them are barely playable. As for my game I’ve spend about $1200 on the development and slightly more than 2 years of my life. Still think that it’s worth every penny and every minute, since I gained a lot of experience in programming which boosted my professional career. tip 2: Take it seriously, investments are necessary. 3. Respect the product. The development process is painful, you will want to quit several(many)times. But if the game you’re building is the one you would enjoy playing yourself it would make the process more interesting and give it additional meaning. The third tip is my main keynote. tip 3: Build a game you would want to play yourself. 4. Share it with the closest friends and relatives, BUT… tip 4: …choose beta-testers wisely. If you don’t want to pay extra money for professional testers then friends\colleagues\relatives are gonna be the first ones to test the game. Try to find what kind of games they like since probably not each of them represents your target audience. And I suggest sharing the product not earlier that in the “beta” stage — otherwise you would need to explain a lot of game rules and that would harm the user experience and you gain almost nothing useful out of it. 5. Make use of your strengths. It will cost you less if you know how to code or how to create an assets. In my case, I didn’t need to hire a programmers or game designers. No one is able to implement your idea better than you, that’s why I suggest to tip 5: Take as many roles in the project as possible. But do not forget about the tip 1. 6. Don’t waste too much time on planning. No, you still need to have some kind of a roadmap and game design document, just tip 6: Make documentation flexible. You would probably need to change it many times. In my case a lot of great ideas had come during the development process itself. And don’t be afraid to share your ideas within a team and listen to their ideas as well! 7. You will hate your game at some point. That may sound sad, but that’s true. After a ten-thousandth launch you just hate the game. You may be tempted to start a new “better”, “more interesting”, etc. project at that point, but, please, tip 7: Don’t give up! Make it happen. Share the game with the world since you’ve put a lot of effort into it. Those tips I’ve discovered mostly for myself and more than sure that for a game industry giants the list above may sound like a baby talk. Nevertheless I still think it might be useful for those dreaming to create the best game ever.
  14. Ruslan Sibgatullin

    First game crash report

    Originally posted on Medium The Totem Spirits game is in the market for a few weeks already and this day came inevitably — I received the first crash report. To be honest, there were 5 of them, but all from one device, so the error is the same. I was truly surprised by this! My game was tested by several people and already downloaded by 50+ more. There were no errors till November 7th when someone with Samsung Galaxy Trend Plus (768MB RAM, Android 4.2) got the game. If by any chance you are reading this article, please, know that I’m deeply sorry that you can’t play! Then, I checked the error (aka stack trace) and became even more surprised because this error… told me nothing. Of course I can find the exact place in the code where this problem occurred but there is literally nothing wrong with it! (It works for 50+ other devices, remember?). Moreover, it is not reproducible on any of my devices — I even ran the game without any issues on an old Acer Liquid MT (which BTW was released 7 years ago). Looks like a dead-end one might say, but I didn’t give up. There are several ways to ask for help in the developer’s world. In this case I decided to create a topic on libGDX (game engine) forum and ask them directly because the issue seems to be in the core library itself. In addition to this I also asked a question on StackOverflow (so unpredictable). Now it’s time to give a little insight into the error. The crash report in Google Play Console looks like this: Even if you are not familiar with libGDX, you may find some keywords like: xml, parser, fileHandle, rootElement from which you can guess that the error lies somewhere in xml file parsing. And this is totally correct! The application on this device failed to parse locally stored file needed for the game to behave properly. What was even stranger — look at the stack trace once again. Have you noticed that there are no custom messages in exceptions? But the developers of the game engine are quite smart guys so the messages are actually exist in the source code. Looks like magic to me… Although, there were some problems with the engine itself too, I fixed’em already with this PR . As sad as it sounds, so far there is no resolution, but I’m not going to give up on this. When you develop for hundreds different Android devices occasional errors are inevitable. It is just impossible to test a product on each and every smartphone out there. But I believe every problem should be fixed anyhow. After all, if there is no other way some devices may be marked as “Excluded” in Google Developer Console. No support — no problems, right? :)
  15. Ruslan Sibgatullin

    How I halved apk size

    Originally posted on Medium You coded your game so hard for several months (or even years), your artist made a lot of high-quality assets, and the game is finally ready to be launched. Congratulation! You did a great job. Now take a look at the apk size and be prepared to be scared. What is the size — 60, 70 or even 80 megabytes? As it might be sounds strange to hear (in the era of 128GB smartphones) but I have some bad news — the size it too big. That’s exactly what happened to me after I’ve finished the game Totem Spirits. In this article I want to share several advises about how to reduce the size of a release apk file and yet not lose the quality. Please, note, that for development I used quite popular game development engine Libgdx, but tips below should be applicable for other frameworks as well. Moreover, my case is about rather simple 2D game with a lot of sprites (i.e. images), so it might be not that useful for large 3D products. To keep you motivated to read this article further I want to share the final result: I managed to halve the apk size — from 64MB to 32.36MB. Memory management The very first thing that needs to be done properly is a memory management. You should always have only necessary objects loaded into the memory and release resources once they are not in use. This topic requires a lot of details, so I’d rather cover it in a separate article. Next, I want to analyze the size of current apk file. As for my game I have four different types of game resources: 1. Intro — the resources for intro screen. Intro background Loaded before the game starts, disposed immediately after the loading is done. (~0.5MB) 2. In menu resources — used in menu only (location backgrounds, buttons, etc). Loaded during the intro stage and when a player exits a game level. Disposed during “in game resources” loading. (~7.5MB images + ~5.4MB music) 3. In game resources — used on game levels only (objects, game backgrounds, etc.). Loaded during a game level loading, disposed when a player exits the game level. Note, that those resources are not disposed when a player navigates between levels (~4.5MB images + ~10MB music) 4. Common — used in all three above. Loaded during the intro stage, disposed only once the game is closed. This one also includes fonts. (~1.5MB). The summed size of all resources is ~30MB, so we can conclude that the size of apk is basically the size of all its assets. The code base is only ~3MB. That’s why I want to focus on the assets in the first place (still, the code will be discussed too). Images optimization The first thing to do is to make the size of images smaller while not harming the quality. Fortunately, there are plenty services that offer exactly this. I used this one. This resulted in 18MB reduction already! Compare the two images below: Not optimized Optimized the sizes are 312KB and 76KB respectively, so the optimized image is 4 times smaller! But a human eye can’t notice the difference. Images combination You should combine the same images programmatically rather than having almost the same images (especially if they are quite big). Consider the following example: Before After God of Fire God of Water Rather than having four full-size images with different Gods but same background I have only one big background image and four smaller images of Gods that are then combined programmatically into one image. Although, the reduction is not so big (~2MB) for some cases it can make a difference. Images format I consider this as my biggest mistake so far. I had several images without transparency saved in PNG format. The JPG version of those images is 6 times more lightweight! Once I transformed all images without transparency into JPG the apk size became 5MB smaller. Music optimization At first the music quality was 256 kbps. Then I reduced it to 128 kbps and saved 5MB more. Still think that tracks can be compressed even more. Please, share in comments if you ever used 64 kbps in your games. Texture Packs This item might be a bit Libgdx-specific, although I think similar functionality should exist in other engines as well. Texture pack is a way to organize a bunch of images into one big pack. Then, in code you treat each pack as one unit, so it’s quite handy for memory management. But you should combine images wisely. As for my game, at first I had resources packed quite badly. Then, I separated all transparent and non-transparent images and gained about 5MB more. Dependencies and Optimal code base Now let’s see the other side of development process — coding. I will not dive into too many details about the code-writing here (since it deserves separate article as well). But still want to share some general rules that I believe could be applied to any project. The most important thing is to reduce the quantity of 3d party dependencies in the project. Do you really need to add Apache Commons if you use only one method from StringUtils? Or gson if you just don’t like the built-in json functionality? Well, you do not. I used Libgdx as a game development engine and quite happy with it. Quite sure that for the next game I’ll use this engine again. Oh, do I need to say that you should have the code to be written the most optimal way? :) Well, I mentioned it. Although, the most of the tips I’ve shared here can be applied at the late development stage, some of them (especially, optimization of memory management) should be designed right from the very beginning of a project. Stay tuned for more programming articles!
  16. Originally posted on Medium I released my first game approximately a month and a half ago and actually tried almost all of the methods I could find on various websites out there - all of them will be listed here. With this article I want to share the story of my “promotion campaign”. The very first thing I did was the Medium account creation. I decided to promote the game using thematic articles about game development and related stuff. Well, actually, I still do this, even with this article here :) In addition to Medium the same articles were posted to my Linkedin profile, but mostly to strengthen it. Moreover, you may find a separate topic on Libgdx website (the framework the game is written on). Then, the press release was published. Actually, you should do a press release the same day as the game launch, but I didn’t know about that back then. And to be honest, all of the methods above were not quite successful in terms of game promotion. So I decided to increase the game presence around the web and started to post articles on various indie-game dev related websites and forums (that's how this blog started) Finally, here comes the list of everything created over the past month (some in Russian, be aware): https://www.igdb.com/games/totem-spirits http://www.slidedb.com/games/totem-spirits https://forums.tigsource.com/index.php?topic=63066.0 https://www.gamedev.net/forums/topic/693334-logical-puzzle-totem-spirits/ http://www.gamedev.ru/projects/forum/?id=231428 https://gamejolt.com/games/totem_spirits/298139 https://vk.com/gameru.indie?w=wall-9222155_202256 https://test4test.io/gameDetails/24 Not so many one can say. But I could not find any more good services! If you know one, please, share in comments. What are the results you may ask? Well, I have to admit that they are terrible. I got a little less than a hundred downloads, and I’m pretty sure that most of them from the relatives and friends. And you can’t really count such as a genuine downloads, since I literally just asked them to get my game on their smartphones. But the good thing is that many of those who played Totem Spirits shared their impressions about the game. They truly liked the product! That was so pleasant to hear their thoughts. I know in person several people who finished the game with all diamonds (a.k.a stars) collected. Still, I don’t regret the time spent on the game because I’ve learnt a great lesson — two years of development is a way too much for such simple and narrow-profile game. It seems that now is not a good time for such complicated puzzlers or I just failed badly with the promotion) Now the next plan is to develop and launch a game in a maximum 160 hours (two working months). The coding process has already begun, so hopefully in January you will see the next product of Pudding Entertainment company!
  17. Have you played physics puzzles , which are very addictive and you just can't take your mind off that stage you’re stuck on, well here's another of those logic puzzles ; totally free . Bounce N Bang Play Store Trailer: Using cannon, shoot your enemy or bounce cannon-ball through walls guiding it towards their building.Rotate cannon , place moving walls , making the best angle ; just so when you open fire , ball hits the target. Key features:➤ Currently 30 levels (more coming soon)➤ Innovative game play (logical thinking , openfire / shooting cannonball, bounce off borders)➤ Fun animation (especially of explosion)➤ Simple and addictive (solve the puzzle, which gets difficult)Not always that easy, when you openfire , line of shot should hit the end point after limited reflection.How•Use touch or buttons to rotate cannon.• Aiming at enemy directly or bounce off walls guiding it towards them. • Rotate and place moving walls at suitable points ; so when you openfire, BANG ! Cannonball hits the target. Little story if interested : Zormen kingdom has forcefully taken over a village and jailed its inhabitants; few of them have managed to escape prison .They are now trying to get back their occupied land and people. You are a savior who is helping villagers . Provided with cannon you need to destroy enemy's castle. Further story inside game. Screenshots:
  18. Hey guys :) I just launched my first game for Android and i would love if someone would give me feedback on what is good or bad in game. Any type of suggestions would be greatly appreciated, I'm open to criticism and would like to improve my game in any way i can. Link to the game on the Google Play store: Space Odyssey Goal of Space Odyssey is to orbit around the center to avoid incoming waves of enemies and bosses. You can collect coins to buy new spaceships and abilities. Screenshots: Thank you! :D
  19. Hello All, Well we are wrapping everything up nicely for release. We are looking at August 21st as the absolute last day to submit to Apple. Shooting for sometime next week for submitting. Will let everyone know when we submit. My wife, Sarah, is still recovering in the hospital. She was set to come home today but is down 2 bags of blood so she needs to get a transfusion. So hopefully tomorrow she will be back home. There was a ton of work done on the game. It has been extremely rough for me emotionally. I’ve had my real downs. Creating and working on this game is definitely therapy for me. I completely understand why musicians and artists turn to there work as therapy, it really does work. If I didn’t have this and my kids I would be an absolute wreck. My kids keep me focused and remind me that they need me as much as I need them, they are definitely a rock for me right now. We had a surprise that happened this week. As I was spending the night with my wife in the hospital we were presented with the opportunity to have legendary Dale North compose the in game music. If you do not know of Dale North please check him out here: dalenorthmusic.com He is extremely talented and has worked on a lot of well known video games. We are blessed to have him on our game and I cannot wait to hear what he has for me and share it with you all. More to come!! Luis will still be creating the game’s sound effects as previously announced. Here is the changelog: Dale North will be doing the music for the game!!! Added Chapter 2 game over screen now if you get game over from any room in chapter 2 you get the appropriate game over screen MFI Controller Compatible!! Working Great on my Nimbus, very excited about this. Secret Rooms for Chapter 2 have been created, tested, and added. Testing complete for Chapter 2 (This took a good amount of time as I was very thorough) lots of bugs fixed thanks to beta testers as well New and probably last test build was submitted to test flight you can now dodge enemies and fireballs when you roll you are invincible during the first half of the roll this little change makes a huge difference in the mechanics very fun and helpful to roll around and dodge Player now kicks out dust when they roll Adjusted the lighting on all Chapter 1 dark rooms Corrected splash page Completed Intro of Boss (Chronic) in Chapter 2 Chronic is now fully animated and the room layout is complete! adjusted the boss’s multiple health max (yes there are multiple spots it has different health) Changed text boxes to contextual based text boxes now the background of the text box will look like the interactive object great visual seeing how this is the way you will learn the story added a subtle glowing star above the paper as a visual tell so you can identify where they are added a red type color to the text on the sign. After going through every type of color this was the only color that you could easily see that was closest to the color palette used in the game. Fixed a bug with the pickups spawned from grass on Chapter 2 not being centered added smoke effect when the Doors and Gates are destroyed IAP created, tested, verified, and working don’t have the finished graphics for this yet so just a test button placeholder being used for supporting us for the cost of .99 cents (less than a coffee) we give you 50 coins in return and a huge thank you! 50% of all proceeds we will donate to DanaFarber for cervical cancer research! Here is a quick video just showcasing some of the changes made and the additions without spoiling anything to much. I need some of this to be a surprise! Thank you and please let us know your thoughts, comments, criticism, etc. View the full article
  20. I'm starting games development on Android and want to implement something similar to the NYTimes crossword puzzle. What's a good choice of libraries/tools on Android for word games development? Is there a specific game engine I can use or can this be implemented with basic Android UI elements?
  21. On the 6th of January, 2014, I joined IsCool Entertainment as a game developer on the recently released mobile game named Bazoo. It was a long time ago and the project went through a lot of phases. Let me tell you its story… [All illustrations courtesy of IsCool Entertainment.] The genesis The story of Bazoo begins near 2013, when the mobile market was overwhelmed by match 3 games following the successful Candy Crush Saga released the year before. One producer at IsCool rightfully saw in this trend the perfect conditions to create a game out of his younger memories. The man had a lot of fun playing puzzle games with his friends in high school and he wanted to bring back this feeling to today’s players. This was quite a good idea since puzzle game is a popular genre today and the gameplay of some past successful puzzles are not exploited today on mobile. Also, multiplayer mobile gaming is a really hot subject, so it is a match! At its core, the launch of this project can be expressed in few words: let’s do a real-time PvP mobile puzzle game! At the time, the company’s expertise was into developing and publishing its own games mostly for Facebook with some attempts on the mobile market. Some of these games were played asynchronously in multiplayer. In a way, almost everything in the pitch of Bazoo was new for us. Also, most match 3 games worked on the saga mode, and real time PvP gaming was quite new and still had to prove itself in a business point of view. In order to tackle these problems down, we had to remove some constraints from the initial pitch, starting with the most obscure areas: goodbye real-time, goodbye PvP, our first try on mobile gaming will be a saga-like puzzle game. A long way to go. Two thirds of the idea are already out. It was for sure quite far from the initial project’s pitch, hopefully it was a game seemingly reasonable according to our expertise in game development. Actually, I think it is important to emphasize how compromising from the very beginning put us on a path to the game we actually wanted to make. First encounter When I entered the company, the project was already six months in the making. There was a lot of questions about it. Its name has been changed at least once to become Bazoo Block, and its assets were repurposed from another project. The game was quite fun and incredibly beautiful but the team was not exactly thrilled by the product. Actually the subject of online PvP gaming was still present in their minds. The gameplay at the time was mostly a mix of Baku Baku Animals and Puzzle Fighter, plus some nice features of our own. In short, the player had to survive a fight against a computer-controlled opponent where both characters would receive a sequence of blocks from a launcher to assemble and destroy. Depending on the destructions, a varying quantity of extra blocks would fall in the opponent’s game board, making it harder to clear and eventually filling it completely. The game ended when one player could not receive any new block from the launcher. Chained destructions (a.k.a. combos) were rewarded by an increase in the intensity of the resulting attack. The first reader to send me a complete list of things in this capture that have been removed from the initial release of Bazoo wins a t-shirt. As you can see, the core gameplay was very similar to what we have today. From Baku Baku Animals specifically, there was the animals and the foods: four types of animals would destroy their associated food. From Puzzle Fighter there was the super blocks and the patterns of the attacks: grouping similar foods in a rectangular shape would increase their strength in the attacks and the blocks resulting from the attacks would fall in various specific patterns more or less difficult to clean up. On top of this we added some power ups and variations in the gameplay. The game followed the saga models of this time: the player evolved on a map where he would have to solve puzzles of various difficulties in order to access more puzzles. There were levels where he had to fight against an AI and other levels with a single game board and played in a time attack mode where he had to destroy a specified amount of a given food in the alloted time. One of the map on which the player evolved. As the player progressed on the map, its XP gauge was filled. Then every once in a while, when the gauge was full, one of the animals received a level-up, thus making stronger the attacks resulting from the blocks it would destroy. Holiday time Then the summer came and half the staff left in vacations. The project slowed down so… Hey, it’s a good time for R&D! What if we connect two devices over the network and make each one to appear as the opponent of the other? Let’s try and see… And there we had our first real-time online PvP mobile game :) In a few days we went from a classic saga puzzle game to a unique PvP puzzle game. This prototype was a life changer and thus brought a lot of questions. What was the future of the saga mode? Should we throw it, or keep it as an alternate game mode? What if the player has no network? Then went a period of approximately four months during which we maintained the saga in the game until we finally accepted to trash it so we could focus on the game we actually wanted to make. We are in September 2014 and we have a puzzle game that can be played against other players over the network. Ready for the release? Well, not quite… Are we there yet? Let’s get it straight: at least eighty percents of your game is not related to the gameplay. As you may have deduced from the release date of Bazoo and the above paragraphs, we were quite far (like two and a half years) from having a decent game. Here are the subjects we had to work on once the core gameplay was satisfying. Server code First of all, the game now being online, we need a server and thus more developers. From now on consider that each feature will have a server part and a client part. Twice the work and more human synchronization! Tutorial Introducing the game to the players is maybe one of the most difficult parts in the development. When you write a software, everything seems so obvious… Then you run some user tests and all you see is people entering the application with no idea of what to do next, struggling to launch a game during several long minutes. Seriously, do we really have to explain that the rabbit eats the carrots and that the dog eats the bones? No joke. Yes, we must explain it. As a player who skips most tutorials it was quite difficult for me to accept that, but actually several user tests have shown us that we cannot expect a random player to understand the game during its first experience. Every effort put into making it easier for the player to grasp the game is a good move. So we have added a tutorial in the game, where the player had to perform some fixed moves to see the matching in action. After these actions we would let the player finish the fight against an AI. It was better than no tutorial at all but not enough. The main problem was that the player had to understand the game almost immediately during its first launch. Also he could lose this first fight, so we had to force him to do it again. Finally, for the players who understood the game, this unskippable tutorial was frustrating. Eventually we replaced this tutorial with a slideshow explaining the basics of the game. This is the first thing you see when you install the game today. We also force the player to try some fights against an AI before entering the arena and contrary to the previous version of the tutorial he can do it at his own pace. Notifications It is well known on the mobile market that your game cannot have good retention metrics without notifications to bring back your app in the player’s interest, for better and for worse. We initially opted for a tool named Parse to handle our notifications. The service was backed up by Facebook so it seemed quite solid aaaaand it has been discontinued one year later. This, kids, is how you see yourself trashing your perfectly good code. We then went with Firebase for the notifications, let’s hope this one will last. Analytics Once the players are in your game you will want to gather metrics so you can adjust the game both to offer them a better experience and to optimize your revenues. For example, we need to track how long the players wait before finding an opponent and arrange the matchmaking to offer them someone at their level in a short time. Typical analytics tools consist into sending an event via their SDK on the specific actions you want to track as they occur in the game. We initially went with Upsight which eventually upgraded its version and money plan in a way that would not fit our needs anymore. Thus we changed for a brand new tool named Omniata, aaaaaand it was discontinued four months after we added it. We then went with Firebase for the client and a home-made tool for the server. And this, kids, is how you write three times your analytics code. More game We tried several variations in the gameplay before finding something satisfying. There was a time when the player could use some defense and attack items during the game. It was a cool feature that no one ever used. Players were so focused on the combos that they would go to the end of the game without launching a single power up. We also added a minor change in the way the blocks are controlled such that they can stick to the walls when they are rotated, thus allowing some moves that could not be done before. Some power ups the player could use during the fight. Customization There is a huge focus on the customization of the player’s avatar in Bazoo. It is a feature initially implemented with a simple collection of outfits, then it has evolved to become what it is today: an awesome catalog of items that can be individually assigned to various parts of the character. Look at this! Isn’t it awesome? Rankings Since Bazoo is a pure competitive game it could not exist without the ladders. We have added the world-wide ranking by assigning an Elo-like score to each player and the leagues were added soon after. The first implementation was quite overcomplicated with its groups of various sizes and its skins in the prize pool. We had to simplify the whole thing to make it appealing and it resulted in what you can see in the game today. Community What is an online multiplayer game if the players cannot interact before and after they met? Certainly not a game I would like to play. So we added the messages on the versus screens, then we introduced the buddies (i.e. last opponents and Facebook friends) and the chat. On the game modes we had also implemented a matchmaking for players on the same WiFi but unfortunately it was a feature that was almost not used, so we trashed it. Finally the clans where added, allowing the players to team together. Adding the clans in the game was quite an adventure. Another nice feature is found in the Battles, allowing the players to fight with their friends or to organize competitions with other players. The first implementation allowed the players to enter multiple battles at once but there was nothing to win but pride. This was a nice feature, maybe a bit overcomplicated again. So we cleaned it up. For the second version, which you can use in the game today, the player can enter only one battle at once and there is a prize for the top ranked players at the end of the battle. Streaming Bazoo being an highly competitive game it was important for us to provide a way for the players to stream their fights and to be able to watch the fights of others. The first streaming feature was done with the mobile SDK provided by Twitch. Aaaaaand it was removed four months after its integration, when Twitch stopped supporting it (I see some kind of pattern here…). Today’s players can stream with ReplayKit on iOS and with any streaming app on Android. On top of the screen was a drop down chat with the spectators on Twitch. We also provide in-game features to watch games so one can study the skills of others and improve his owns, and also because it is fun to watch. The first one is a replay feature allowing the players to watch their last fights and the last fight of other players. The second one is a live streaming feature, enabled for everyone. Every fight can be watched by the other players, in which case the spectators are able to send cheers to the fighters to show their support. Social Allowing the player to identify with its Facebook account has several advantages both for the player and the developer. First of all it is certainly the easiest way to link the player’s account on several devices. It is also typically associated with an exclusive bonus in the game and provides a way to offer extra resources to the player’s friends via a gifting mechanism, a thing we have added quite soon in the project. On the developer’s side it is a powerful tool for virality. We already had a plugin named EziSocial to handle Facebook in the saga version. It was a good tool for an initial integration but when we needed up-to-date Facebook services we had to change for something more complete. Thus we went with the Facebook plugin of Cocos2D-X. Again we had issues to keep track of the most recent Facebook API so we finally wrote our own C++ bridge to the official Android and iOS Facebook SDKs. Apple’s Game Center and Google Play Games were also added to allow the player to use his account on several devices. Support Being able to keep a dialog and to answer efficiently to the issues encountered by the players is a key point in keeping your community happy. We use Helpshift for this, which provides an nice interface for the user to access a lot of documentation and a great chat interface with our team. We never had to replace it so I guess it is quite a solid tool. Kudos to them! UI By looking at the above captures you may be wondering if they all come from the same game as they are so different from each other. Finding a great UI was a surprising long process. There was the funny one in the saga, then the pirate theme, then another pirate theme, then the flat one, and the modern one. One game, five homes. There was also a landscape version of the game for a short time, developed for the tablets and for the Apple TV (yep, we also added support for the Apple TV before dropping it). The landscape mode was very pleasant to use, unfortunately it made the development in no small way harder since every screen had to be composed and tested for both layouts. We thus had to abandon it and go with the portrait version only. The landscape version made the fights incredibly more intense but was unusable on a smartphone. The key to success Creating a game is a lot of work, creating a good game is an order of magnitude harder, and creating a successful game is even harderer. As you may have read before there is no recipe for success in this industry, that is why studios appear and disappear quite frequently. This is a market where a success is a surprise even for the game’s creator and where the ten top grossing titles take literally all the money. So how does one can make a living in developing video games? Even if there is no recipe for a success there are some keys toward making a great game: do a game you like, keep an eye your metrics, watch the tendencies on the stores and take care of the design to be as good as the bests. Gameplay is important, also are the graphics, also is marketing, and so on. Even if you don’t end with the game of the year, you may still get a nice and working product, commercially speaking. Then there is trial and error. Some developers try several games at once and trash the ones that do not work, others invest on a single game and polish it until it becomes good. As you may have deduced from this article, we are of the “other” kind, pushing as far as possible the projects in which we believe the most, fixing on the way all the inefficient parts we encounter. Will it work? Maybe there is no market for this game, maybe it will explode. There is no way to tell but we are very proud of the product we have created. In my opinion the team did a very good job with Bazoo. Going from the initial saga mode to this awesome online PvP puzzle game was done efficiently by compromising among fast and incomplete integrations, trashing the stuff that did not work, hopefully without having spent too much time on it, and refining the stuff that did work, once its usefulness was backed up by good metrics and user tests. I would for sure do it again! I hope that this view on the developer’s side was worth reading.
  22. hey guys I am working on real time multiplayer shooter mobile game with up to 4 players per match , currently I am wokring on unity engine with gamesaprks but is gamesparks is the best option for my game and noob me and my 0 budget , I found other platforms like Playfab and AppWarp so I am not sure if I made the right choice with GameSparks .. My question is what's in your opinion the bestmultiplayer platform for realtime shooter mobile game and low budget it's also a big plus if the platform has tutorials (gamesparks documentation is enough for me)
  23. Lee Kee Child the gem hunter is a free diamond collecting game. Android: https://play.google.com/store/apps/details?id=leekeechild.org Windows 10: https://www.microsoft.com/store/apps/9MTZFJBLP7P8 Watch video here: https://youtu.be/0enKpfIJ_Rc The story: Who is this little boy in the cave among diamonds, stones and brick walls? He is Lee Kee Child. His mission is to collect diamonds in the caves. If he was collecting all of diamonds what he needs, the door will open and he can continue collecting diamonds on the next level. Maybe can you help him to collect enough diamonds and completing levels? Try it out! In this work maybe little enemies will be disturbing him. These are flies and butterflies. Them are useful bugs for breaking brick walls and disappearing/isolating acid. Try how it works! The butterflies are the sources of diamonds. If he is dropping a butterfly with a stone it will turn into diamonds, and Lee Kee Child will gain up to 9 diamonds. In some levels has been another source of the diamonds by the isolated acid. The acid will increase randomly on its neighbour green fields and empty fields. If he can isolate successfully the acid by stones or diamonds before it reached up a big size, it turns into diamonds, else it turns into stones. Try what happens when the bugs are impacting into the acid! Features: - 330 different exciting levels - load / save state functions - random map elements
  24. Hey All, We now just finished week 20 of development. It’s amazing to actually see how much we have accomplished in 5 months, and to see what was in my head actually playable and alive. We are down to the last final weeks. I would like to have everything done in the next 2 weeks and by week 22 have the release build sent to Apple for approval. If everything goes as planned we will release the game on September 18th. With the first game content update arriving shortly after that. Wife is still in the hospital but she is on the road to recovery. Thank you to everyone for your thoughts and prayers, it has been a tough 16 days. Here is the Week 20 Change log: Completely re-hauled the options menu re organized, cleaned up, and changed some screenshots and text on the how to play category added an SOSopedia description of enemies, boss, items, and hazards all the enemies and bosses now have names! also the home of the games credits (these are not complete yet, just an empty screen right now) added audio section you can now turn off music and or SFX your own music can play in the background if you turn all audio off (both music and SFX) Added more sounds we almost have the sounds complete only need about 5 more SFX. Luis is wrapping up on that now. further testing on chapter 2 levels, making necessary tweaks and bug fixes as they are found. The entire randomization engine has been updated for Chapter 2. testing just needs to be done. fixed the loot drop % from grass, was too high. created pharmacy shop menu (Store) you can permanently increase heart by 1 (can be purchased twice, second time more expensive) you can permanently increase stamina by 1 (can be purchased twice, second time more expensive) upgrade the medical cabinet in game store to version 2.0. This lowers all prices by 1/2. start every run with 1 firecracker in inventory Only thing to add is the 1 and only IAP. This will be some in game currency for $1.99. Talking with DanaFarber on donating some of the IAP profits to them. Created Official Game Icon Added Game Stats to Game Over Screen (I am really excited about this, I like stats) shows how long your run was how many germs defeated that run how many germs defeated total and total amount of games played Created a new player sprite for item found will implement this animation shortly. Updated, Polished, and Completed all the secret rooms for Chapter 1. Created Boss 1 defeat animation and reward. Also transition to Chapter 2 complete Created sprite and object for fence piece in chapter 2 that leads to secret room updated pause/inventory screen with a visual for how to select items Next 2 weeks will def be busy trying to get the rest done, but in reality there really is not much more to do for the initial release. Thanks, Here is a video showing off the new layout in options. Showing the SOSopedia screens and the Pharmacy, store for permanent upgrades. Second video here is showing off the updated pause/inventory screen, final prices on medical cabinet before store 2.0 upgrade, and the game over screen with stats. I have a lot of hearts for debugging and testing purposes. View the full article
  25. piecuch.p

    TTFTriangulator demo

    I have updated demo for TTFTriangulator (simple C++ library designed to load a truetype font and triangulate its glyphs in real time) library to something working (I think). It is a little chaotic, but also very simple and generic, so easy to reuse (btw: it uses Qt for I/O and windows creation, but you can also use the code I modified and that is using GFLW). You can use my amalgamated (and dependency-free) version, available here: -rw-r--r-- 1 piecuchp staff 69K Jul 26 17:48 TTF.cpp -rwxr-xr-x 1 piecuchp staff 93K Jul 26 06:45 TTF.h -rw-r--r-- 1 piecuchp staff 217K Jul 26 06:50 TTF.o (it is also modified to use QFile for I/O so you can work with Qt's embedded resources) #include <QDebug> #include <QElapsedTimer> #include <QMouseEvent> #include <QPainter> #include <QWindow> #include <QOpenGLContext> #include <QOpenGLShaderProgram> #include <QOpenGLPaintDevice> #include <QOpenGLFunctions> #include <QApplication> #include "TTF.h" using namespace TTF; const char *fragCodeSimple = " \n\ varying vec3 tpos; \n\ float round(float val) \n\ { \n\ return sign(val)*floor(abs(val)+0.5); \n\ } \n\ void main() \n\ { \n\ float alpha = round((tpos.x*tpos.x-tpos.y)*tpos.z+0.5); \n\ gl_FragColor = alpha *vec4(1.0,1.0,1.0,1.0); \n\ } \n\ "; const char *fragCode =" \n\ varying vec3 tpos; \n\ void main() \n\ { \n\ float alpha = 1.0; \n\ if (tpos.z != 0.0) \n\ { \n\ vec2 p = tpos.xy; \n\ // Gradients \n\ vec2 px = dFdx(p); \n\ vec2 py = dFdy(p); \n\ // Chain rule \n\ float fx = ((2.0*p.x)*px.x-px.y); \n\ float fy = ((2.0*p.x)*py.x-py.y); \n\ // Signed distance \n\ float dist = fx*fx + fy*fy; \n\ float sd = (p.x*p.x - p.y)*tpos.z/sqrt(dist); \n\ // Linear alpha \n\ alpha = 0.5 - sd; \n\ if (alpha < 0.0) // Outside \n\ discard; \n\ } \n\ gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); \n\ } \n\ "; const char *vertCode = " \n\ attribute float t; \n\ attribute float c; \n\ attribute vec2 pos; \n\ varying vec3 tpos; \n\ void main(void) \n\ { \n\ tpos = vec3(t*0.5, max(t-1.0, 0.0), c); \n\ gl_Position = gl_ModelViewProjectionMatrix*vec4(pos, 0.0, 1.0);\n\ } \n\ "; double qtGetTime() { static QElapsedTimer timer; if (!timer.isValid()) timer.start(); return timer.elapsed() / 1000.; } class OpenGLWindow : public QWindow, public QOpenGLFunctions { Q_OBJECT typedef void (^RenderBlock)(); private: bool m_done, m_update_pending, m_auto_refresh; QOpenGLContext *m_context; QOpenGLShaderProgram m_shader; Font m_f; public: QPoint cursorPos; public: OpenGLWindow(QWindow *parent = 0) : QWindow(parent) , m_update_pending(false) , m_auto_refresh(true) , m_context(0) , m_f(":/fonts/VinMonoPro-Light.ttf") , m_done(false) { setSurfaceType(QWindow::OpenGLSurface); } ~OpenGLWindow() { } void setAutoRefresh(bool a) { m_auto_refresh = a; } void initialize() { qDebug() << "OpenGL infos with gl functions:"; qDebug() << "-------------------------------"; qDebug() << " Renderer:" << (const char*)glGetString(GL_RENDERER); qDebug() << " Vendor:" << (const char*)glGetString(GL_VENDOR); qDebug() << " OpenGL Version:" << (const char*)glGetString(GL_VERSION); qDebug() << " GLSL Version:" << (const char*)glGetString(GL_SHADING_LANGUAGE_VERSION); m_shader.addShaderFromSourceCode(QOpenGLShader::Vertex, vertCode); m_shader.addShaderFromSourceCode(QOpenGLShader::Fragment, fragCode); m_shader.link(); } void update() { renderLater(); } void render() { glViewport(0, 0, width()*devicePixelRatio(), height()*devicePixelRatio()); glClearColor(0.8, 0.8, 0.8, 1); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); glDisable(GL_DEPTH_TEST); glDisable(GL_CULL_FACE); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-1, 1, -1, 1, -10, 10); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); m_shader.bind(); float scale = 0.1 + 0.2*fabs(cos(qtGetTime()/2.0)); glScalef(scale, scale, 1); glTranslatef(-3.6, 0, 0); renderMsg(m_f, "KomSoft"); m_shader.release(); } void mousePressEvent(QMouseEvent *event) { cursorPos = QPoint(event->x(), event->y()); Qt::KeyboardModifiers modifiers = event->modifiers(); if (event->buttons() & Qt::LeftButton) { } } void mouseReleaseEvent(QMouseEvent *event) { cursorPos = QPoint(event->x(), event->y()); Qt::KeyboardModifiers modifiers = event->modifiers(); if (event->button() == Qt::LeftButton) { } } void mouseMoveEvent(QMouseEvent *event) { cursorPos = QPoint(event->x(), event->y()); } void keyPressEvent(QKeyEvent* event) { switch(event->key()) { case Qt::Key_Escape: quit(); break; default: event->ignore(); break; } } void quit() { m_done = true; } bool done() { return m_done; } protected: void closeEvent(QCloseEvent *event) { quit(); } bool event(QEvent *event) { switch (event->type()) { case QEvent::UpdateRequest: m_update_pending = false; renderNow(); return true; default: return QWindow::event(event); } } void exposeEvent(QExposeEvent *event) { Q_UNUSED(event); if (isExposed()) renderNow(); } public slots: void renderLater() { if (!m_update_pending) { m_update_pending = true; QCoreApplication::postEvent(this, new QEvent(QEvent::UpdateRequest)); } } void renderNow() { if (!isExposed()) return; bool needsInitialize = false; if (!m_context) { m_context = new QOpenGLContext(this); m_context->setFormat(requestedFormat()); m_context->create(); needsInitialize = true; } m_context->makeCurrent(this); if (needsInitialize) { initializeOpenGLFunctions(); initialize(); } render(); m_context->swapBuffers(this); if (m_auto_refresh) renderLater(); } private: void renderMsg(const Font &f, const char *msg); }; void OpenGLWindow::renderMsg(const Font &f, const char *msg) { TTF::FontMetrics font_metrics = f.GetFontMetrics(); // will tell you about the font // Triangulator2DI, Triangulator2DII, Triangulator2DLinearI, Triangulator2DLinearII TTF::Triangulator2DI triangulator; for (int i = 0; i < strlen(msg); i++) { CodePoint cp(msg[i]); f.TriangulateGlyph(cp, triangulator); if (i > 0) { TTFCore::vec2t kerning = f.GetKerning(CodePoint(msg[i-1]), cp); glTranslatef(0.9*kerning.x*0.001, kerning.y*0.001, 0); } struct vertex_t { vec2f pos; signed char texCoord; // 0 = (0,0), 1 = (0.5,0), 2 = (1,1) signed char coef; // -1 = CW edge, 0 = inner segment, +1 = CCW segment }; QVector<vertex_t> verts; for (auto tri : triangulator) { TTF::vec2t v0 = triangulator[tri.i0]; TTF::vec2t v1 = triangulator[tri.i1]; TTF::vec2t v2 = triangulator[tri.i2]; // store in a buffer, or do something with it from here... up to you really verts.push_back((vertex_t){{0.001f*v0.x, 0.001f*v0.y}, 0, static_cast<signed char>(tri.coef)}); verts.push_back((vertex_t){{0.001f*v1.x, 0.001f*v1.y}, 1, static_cast<signed char>(tri.coef)}); verts.push_back((vertex_t){{0.001f*v2.x, 0.001f*v2.y}, 2, static_cast<signed char>(tri.coef)}); } if (verts.size()) { GLint loc = m_shader.attributeLocation("t"); glEnableVertexAttribArray(loc); glVertexAttribPointer(loc, 1, GL_BYTE, GL_FALSE, sizeof(vertex_t), &verts[0].texCoord); loc = m_shader.attributeLocation("c"); glEnableVertexAttribArray(loc); glVertexAttribPointer(loc, 1, GL_BYTE, GL_FALSE, sizeof(vertex_t), &verts[0].coef); loc = m_shader.attributeLocation("pos"); glEnableVertexAttribArray(loc); glVertexAttribPointer(loc, 2, GL_FLOAT, GL_FALSE, sizeof(vertex_t), &verts[0].pos); glDrawArrays(GL_TRIANGLES, 0, verts.size()); } #if 0 printf("%c: %d verts\n", msg[i], verts.size()); for (int j = 0; j < verts.size(); j++) { const vertex_t &mv = verts[j]; printf("%c %d %d, %d: (%f, %f), %d, %d\n", msg[i], j, j/3, j%3, mv.pos.x, mv.pos.y, mv.texCoord, mv.coef); } #endif } } int main(int argc, char *argv[]) { QSurfaceFormat surface_format = QSurfaceFormat::defaultFormat(); surface_format.setAlphaBufferSize( 8 ); surface_format.setDepthBufferSize( 24 ); // surface_format.setRedBufferSize( 8 ); // surface_format.setBlueBufferSize( 8 ); // surface_format.setGreenBufferSize( 8 ); // surface_format.setOption( QSurfaceFormat::DebugContext ); // surface_format.setProfile( QSurfaceFormat::NoProfile ); // surface_format.setRenderableType( QSurfaceFormat::OpenGLES ); // surface_format.setSamples( 4 ); // surface_format.setStencilBufferSize( 8 ); // surface_format.setSwapBehavior( QSurfaceFormat::DefaultSwapBehavior ); // surface_format.setSwapInterval( 1 ); // surface_format.setVersion( 2, 0 ); QSurfaceFormat::setDefaultFormat( surface_format ); QApplication app(argc, argv); OpenGLWindow w; w.resize(800, 600); w.show(); return app.exec(); } #include "demo.moc"
  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!