Would it be alright to use a dedicated state management solution like Redux or Zustand?
@tejasvakhandelwal99512 күн бұрын
This took me some time to understand but in the end I figured it out :)
@SamirKhairati-xu7pm3 күн бұрын
Will you be making the 'possible future content' ?
@swestover2 күн бұрын
If there is enough interest in those topics for the game, and if the series keeps getting interest I plan to add that content. Right now, that content is on my road map, but there is no firm dates tied to it, and sometimes new content is added that was originally included, like being able to catch monsters. Is there a particular topic from that list you are more interested in than the others, or is there any other features you were hoping to see?
@SamirKhairati-xu7pm2 күн бұрын
@@swestover Firstly thanks for covering so many things so far, you've made the best phaser tutorial series out there. I was particularly interested in cutscenes. I feel like it involves a different set of concepts, like camera movement, reusable event components system. I was also interested in map connections and seamless transitions to outside maps. Say there's a pathway between pallet town and route 1, there's a connection, you're going from one map to a different but it feels like it's just one. And the map can be different sizes as well.
@pintour34 күн бұрын
Thanks
@tejasvakhandelwal99515 күн бұрын
Really really getting a good knowledge of phaser3 as well as the how to actually code properly. Thanks a lot :)
@swestover2 күн бұрын
Glad to hear that!
@RenanWRS5 күн бұрын
Great tutorial! I'm following along using Vite and TypeScript, and the JSDocs have been very helpful. One question though: instead of using this.container.setAlpha to control the container's visibility, couldn't we use the boolean this.container.visible and return this variable in the get isVisible method? Would this alternative have any drawbacks, such as interfering with animations?
@swestover2 күн бұрын
Thanks for the kind words. Yes! We could definitely use the built in visible property of the container instead of setting the alpha directly, and this make sense since we are placing all of our game objects for the ui component in the Phaser Container. In theory, this should not have any drawbacks or interfere with anything else we are doing in the game. When we set the alpha to 0, or set the visible variable to false, Phaser uses similar logic internally for handling the object. Thanks for the great suggestion and feedback.
@tejasvakhandelwal99516 күн бұрын
Really grateful for you to make this tutorial
@tejasvakhandelwal99518 күн бұрын
Really needed this course, Thank you so much
@swestover8 күн бұрын
Thanks!
@tejasvakhandelwal99518 күн бұрын
Really excite to start learning, looks fun
@swestover8 күн бұрын
Hope you enjoy the series!
@pavloburyanov58428 күн бұрын
The real JSON-driven development)
@pavloburyanov58428 күн бұрын
Or you can use ZenMode
@swestover8 күн бұрын
Here is a link to a more detailed video: kzbin.info/www/bejne/mYPMameHg6lngbcsi=OF4MubUFSCNiDZ6Y
@pavloburyanov58428 күн бұрын
Its always great to have multiple ways to do things. But I like to define "keys" as enums in one place which prevents any typos in future. To make thing simpler I defined a couple of private methods to load different stuff, for example: private loadAnimation(key: string, assetKey: string, frames: number[], rate = 10, repeat = -1) { this.anims.create({ key, repeat, frameRate: rate, frames: this.anims.generateFrameNames(assetKey, { frames }), }); return this; }
@swestover8 күн бұрын
Thanks for sharing the example. Yeah, it is always nice when there are multiple ways to approach the problem, and I really like the enum approach when we need to reference the same key in multiple locations. Makes it really easy to refactor later as well....
@pavloburyanov58428 күн бұрын
@@swestover Additionally Im thinking about small loader wrapper to have nice integration with TS type system. Because currently when you're accessing json from .cache it has type 'any'. I wondering how to deal with it in elegant and not overcomplicated way.
@kevinka998 күн бұрын
Interesting but I dont see much benefit of this use because we lose a lot of animation helper methods like generate frame number and names. by creating a json with an array with the information you need and loop it should be better
@swestover8 күн бұрын
I definitely agree with you that with this approach here we do lose access to the helper methods, which puts more burden on the dev if you do this manually like I did in the video. I think were this approach really shines is if you combine this with some other type of tooling, like if we have a UI that can be used for creating and testing the animations, and when you export out the JSON, it would be the completed JSON configuration that is needed.
@pavloburyanov58428 күн бұрын
@@kevinka99 It may help to build one-scene small game very quickly. Also you can 'pack' your assets with JSON to reuse later.
@DongHan-ty3ck8 күн бұрын
Can players walk anywhere they want, except up, DOWN, LEFT and RIGHT
@swestover2 күн бұрын
For the movement in the game, we limit the player to those four directions and we check for collisions between the player and various objects in our scene in order to limit were the player can move in the game. If you have any other questions, please let me know.
@RenanWRS8 күн бұрын
Great tutorial! I was wondering if those callbacks could be replaced by Promises using async/await? Would this be a recommended practice in Phaser projects?
@swestover8 күн бұрын
Thanks! Yes, we can definitely replace the Promises with async/await, and this is something we start doing later in the series. As for if it is recommended practice in other Phaser projects, it really depends on where you implementing the code, since by default the Phaser Scene lifecycle events will not wait for the promises to complete before moving on in the code. A good example is if you are trying to use async code in the `preload` method of your Scene. In order for you to fully await the code to be finished before transitioning to the `create` method, you will need to do some custom work. However, in these examples here were we are just reacting to things and expecting a chain to be followed, these would be great candidates for using async/await.
@RenanWRS8 күн бұрын
@@swestover Thanks for the detailed explanation! It's great to hear that async/await is being introduced later in the series, I'll definitely keep following along.
@Thr111ce8 күн бұрын
thank you for these man, theyre great
@swestover8 күн бұрын
Thanks for the kind words!
@terrancrypt9 күн бұрын
i still watching your videos, sir
@swestover8 күн бұрын
Happy to hear that!
@cjwestover45279 күн бұрын
Fantastic as always!!
@TylerMarshall000714 күн бұрын
why cant i comment :/
@swestover13 күн бұрын
Sorry to hear you having trouble with comments again....
@TylerMarshall000713 күн бұрын
@@swestover i think its because i used certain words youtube thought i was advertising. i was talking about some work i did on my channel that was relevent to porting to mobile in phaser 3.
@UnderArea5114 күн бұрын
@cui.cui.14 күн бұрын
Curious if you're planning to tackle the deployment part a phaser game? Like deploy on mobile (ios or android or both?) but there aren't that many resources about that out there.
@TylerMarshall000714 күн бұрын
trying to reply again. the game is made in javascript so it can run on any browser including mobile. the tricky part is adding controls
@cui.cui.14 күн бұрын
@@TylerMarshall0007 hey, yes I know it can run on a mobile browser, but i'm more interested in getting it to run as a standalone app (which will probably be a webview wrapped in an app). I think Vampire Survivor uses Phaser. So some successful games are actually running on Phaser. I've heard stuff about Cordova etc, but there doesn't seem to be a definitive way of doing it.
@swestover13 күн бұрын
Thanks for the additional details on what you looking for. At the moment I don't have anything lined up for this topic, but I can add it to my list of possible topics to cover. I know that some of the resources I have seen on how to achieve this are outdated, and may not work the same anymore. It would definitely be an interesting topic though...
@cui.cui.14 күн бұрын
This is gold! thanks for doing this series! so helpful!
@swestover13 күн бұрын
Thanks!
@swestover14 күн бұрын
For those interested, here is a link to a video that covers this topic in more detail: kzbin.info/www/bejne/Y4bKpn19lq93eJI
@rgclube667215 күн бұрын
Quite useful😊
@unclechris15 күн бұрын
I have my assets (including this json file) in ./assets but they are not respecting the "path": "./assets" in the json file and 404's the images. If I prepend "./assets/someimage.jpg" to the "url": in the actual data, they load. Never mind, I had the "path" positioned incorrectly within the JSON file.
@cjwestover452716 күн бұрын
Very cool! Not just that we have the same lasr name; but the video too!
@saidesteban905719 күн бұрын
I have been developing a game for almost a month, which despite not having many elements, had a disgusting lag and the textures broke from time to time, I had to watch this video and see that in the configuration it says 'type: Phaser. CANVAS' thank you very much
@deltagamma144219 күн бұрын
The built in methods for game objects is such a time saver!
@yousufjr.849620 күн бұрын
Hey Scott is there a way to reach out to you I really need some help , I am making a similar game for my major project
@swestover19 күн бұрын
Hi there. Here are a few different ways that you can reach me directly: Linkedin: www.linkedin.com/in/scott-westover-77393a97/ GitHub Discussions: github.com/orgs/devshareacademy/discussions Phaser Forum: phaser.discourse.group/u/scottwestover/summary
@yousufjr.849619 күн бұрын
@@swestover thank you
@yousufjr.849618 күн бұрын
@@swestover I have sent you connection request on LinkedIn
@rgclube667222 күн бұрын
Hey, your voice is so soothing, just what I need at 4 am when I don't understand how to create a simple ui using phaser :_)
@DongHan-ty3ck22 күн бұрын
Nice!
@kevinka9923 күн бұрын
I cannot thank you every video but you're a Phaser hero
@UnderArea5126 күн бұрын
AWESOMENESS!!!
@swestover26 күн бұрын
Thanks!
@kevinka9927 күн бұрын
to be honest I didnt like too much JSDocs on tutorials video It polutes too much code, isnt the same typescript you defined types and interfaces outside the scope but jsdocs is above the variable and methods it makes hard to follow the implemention and know where you are at the code since theres a lot of commentary over there
@swestover26 күн бұрын
Thanks for taking the time to leave a comment and for the feedback. I will keep this in mind for future videos!
@tejasvakhandelwal99514 күн бұрын
@@swestover For me I didn't had the knowledge of the JSDocs so it was a good tutorial for letting me know more about the tools used in development.
@Ice-uw8vd29 күн бұрын
Could you help me with something? I've been working on a basic snake game and I've recently introduced swipe gestures. However, I've encountered a problem: the swipe gestures are only detected within the game canvas itself. I have an idea of centering the game on the screen and surrounding it with UI elements that take up the remaining space. That way I could apply the swipe detection to both the game and UI elements surrounding the game, and I could add features like a score being displayed during gameplay. So, I'd have the main scene contain a UI element that wraps around the game itself. I just have no idea how I can implement that. Thank you in advance!
@swestover26 күн бұрын
For the pointer events in Phaser, these are built off of the built in browser Pointer events, and so one idea is you could target the HTML document itself instead of using the Phaser Scene event for the pointer down, which is just listening for the event on the HTML Canvas element. By switching to the document body, this will let you listen for the event on the whole page if you document body takes up the whole page. As an example, in the `setupEvents` method, if you replace the code for creating the event listeners with: ``` document.addEventListener(Phaser.Input.Events.POINTER_DOWN, (/** @type {PointerEvent} */ pointer) => { console.log(pointer.x, pointer.y); this.#handlePointerDown(pointer); }); document.addEventListener(Phaser.Input.Events.POINTER_UP, (/** @type {PointerEvent} */ pointer) => { console.log(pointer.x, pointer.y); this.#handlePointerUp(pointer); }); ``` This will give you the browser Pointer object, which has the x and y position of were the click took place. Since this is the raw Pointer object instead of the Phaser Pointer object, you will need to handle the object a little bit differently. For example, you will need to switch: ``` this.#lastPointerDownLocation = pointer.position.clone(); ``` to be: ``` this.#lastPointerDownLocation = new Phaser.Math.Vector2(pointer.x, pointer.y); ``` Besides those changes, the main logic discussed in the video should still work. Hope this helps.
@Ice-uw8vd26 күн бұрын
@@swestover Thank you very much!
@DongHan-ty3ck29 күн бұрын
hi bro ! my phaser is "version": "3.80.1", if dont setMask, reatShape need set color to see the react. hope can help other people~
@kevinka99Ай бұрын
the magic of your tutorials is cause you go deep into the explanation!
@swestover29 күн бұрын
Thanks for the kind words!
@kevinka99Ай бұрын
hey dude, I'm also in a begin lesson of yours and Im enjoy it so much. really thank you, you're making me so excited with Phaser, Ive tried it while ago but documentation are so bad and tutorials none of them got my attention you are making something Im wishing to do and thats so amazing cuz Ill have really a good step by step to follow along with me also you seems be a such a good developer!
@swestover29 күн бұрын
Thank you so much, and I am glad to hear you are enjoying the series!
@UnderArea51Ай бұрын
🎉 Mult Monsters!
@Adam-vm6tcАй бұрын
Hey Scott, I'm on lesson 11 of this tutorial, and I just wanted to thank you for sharing your knowledge (for free!) with us. I'm really enjoying it and I can't wait to apply it to my own games. You sir are a beast and a prince among men!
@swestover29 күн бұрын
Thank you so much for the kind words!
@Ice-uw8vdАй бұрын
Thank you so much for this video!I really appreciate that you also give some explanation about the math that goes into this script.
@swestover29 күн бұрын
Glad it was helpful!
@q16solverАй бұрын
Great content! I was thinking about some of the features that modern games have now with things like minimaps and teleport portal points, and was wondering if it was possible to implement it in phaser. For teleporting, it would be simple enough to just add a teleport object in tiled and have an interaction that connects to all the other unlocked portal teleport points, but I have no idea how minimaps work here, like perhaps we need to draw a circle and map different tiles to different square colors and draw it out and have the player as some sort of cursor? Not sure if there is some standard here in the gaming industry, it would be great if we can cover it in the tutorial in the future, thanks as always for the tutorials!
@swestoverАй бұрын
For the teleporting, I think that approach would work well, and it makes it easy to work connect the various points. For the minimap, I guess this would depend on the type of minimap you want to show and what is important to show on the map. For example, if we wanted to re-create a minimap like in the game Defender, we could do something like add another camera to the Phaser Scene and just modify the zoom level there. Example screenshot of the game: upload.wikimedia.org/wikipedia/en/4/43/Defender_Gameplay_Screen.jpg I will definitely keep this topic in mind for future content!
@q16solverАй бұрын
@@swestover Yeah, I was thinking something more like how v-rising does it (mainly because I was recently playing it haha), almost like some kind of compass, I did find some guides on phaser 2 that maps tiles to square tiles and draws it, so maybe it is possible
@DongHan-ty3ckАй бұрын
why my animation will freeze for a while
@swestoverАй бұрын
By chance, would you be able to share an example of the freezing issue you are seeing? One thing to check would be the frame rate of the game when you are seeing the issue. If there is a very low FPS, this could cause issues with the animations. If you are using Chrome, the developer tools have a built in FPS meter that will display the current value.
@DongHan-ty3ckАй бұрын
@@swestover thanks ! low FPS is anwser
@DongHan-ty3ckАй бұрын
@@swestover and i find When I type spaces quickly, the displayed text overlaps. Will this problem be fixed later in the video?
@swestover29 күн бұрын
Yes, that bug should get fixed in later videos. We end up refactoring some of the logic between the battle menu and battle states a few times as we add new features to the game.
@DongHan-ty3ck29 күн бұрын
@@swestover thanks!
@DongHan-ty3ckАй бұрын
nice! i use less event loop in my work, but the stateMachine make me learn a lot! this.time.delaycall is macrotask , right?
@swestoverАй бұрын
Yes, that is correct.
@gamedevshrimp7489Ай бұрын
Hello sir! thanks for the tutorial but I can't use your example project because an error 'Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of "video/mp2t". Strict MIME type checking is enforced for module scripts per HTML spec.' I'm not a skilled developer so I can't resolve it by myself, can you help to fix it?
@swestoverАй бұрын
Can you please share more details on how you are trying to run the project locally? For that error, it sounds like the project is trying run the TypeScript files directly, but would need more details to confirm.