cocojas

cocojas

Apple Game Frameworks and Technologies - Adding monster entity to scene array (779)

The code to add the monster entity to the scene’s entity array (so that the generator-spawned monsters get component updates) in chapter 13 comes on page 779 (or thereabouts, I’m not sure if my reader has re-numbered pages). This is fine, but it needs to be moved earlier in the chapter, to the point where the update method is added to the agent component for the monster. Since the agent component is not part of the component system that’s being driven by the GameScene update event, the monsters never participate in the “chase” behavior, which may confuse people who are new to the platform.

Excellent material, I’ve really enjoyed reading it and testing everything out since the original alpha. Once it’s out, I’m going to recommend to my friends who are interested in these technologies.

Cheers, Jason

Marked As Solved

Paradox927

Paradox927

Author and Editor at PragProg

All right, I’ve had a chance to review this chapter, and I made some changes.

In the Add the Player Agent to the Component System section, I end with this:

Build and run the project, but don’t pick up the key right away. Give the monsters some time to wander around first. After a short while, pick up the key, and watch how some of the monsters’ attention turn to Val. (Don’t worry, the monsters still can’t hurt Val, but you’re about to work on that next.)

That paragraph above indicates that the monsters will chase Val after she collects the key. Of course, the monsters won’t chase her because their entities haven’t (yet) been added to the scene’s entity array.

To fix this error, I’ve modified the end of that section, which now reads:

Excellent, the didMove(to:) method is cleaner, but there’s still one more thing you need to do: get the monster entities to participate in the updates.

I also added a new section immediately after the Add the Player Agent to the Component System section, which looks like this:

And, I updated the Update Physics for Monsters and Projectiles section to reflect this change.

This flows a lot better and doesn’t give the reader the impression that they may have missed a step. Thanks for finding this one!

I don’t think another beta is coming out, but the “fix” will be in the final release. Marking this one solved. :star_struck: :grin:

Also Liked

Paradox927

Paradox927

Author and Editor at PragProg

Hey, Jason.

Thanks for reaching out.

So, I’m looking through the chapter now, and I’m not sure what you mean, so please forgive me if I’m not answering your question properly.

On page 301 (Creating the Agent Component), which I’m sure doesn’t align with your reader’s page numbers, there’s a bit of code that you need to add to the didAddToEntity() method. Specifically, the line that reads scene.agentComponentSystem.addComponent(agent) is where that component gets added, causing it to participate in the updates.

Is it possible that you missed that step? If not, maybe I’m misunderstanding what’s happening, which could be the case. Let me know. Thanks!

Also, I’m so happy to read that you’re enjoying the book. I had a lot of fun writing it. :heart_eyes:

cocojas

cocojas

Hi Tammy,

No worries, I struggled a lot with how to explain it, especially since e-readers constantly renumber pages :slight_smile:

The actual agent simulation is working, but in the first half of the chapter (Chapter 13—Planning Routes and Creating Believable AI), if the reader is following along doing the coding, the monsters themselves won’t be participating in the update cycle since the MonsterEntity (that get created by the generators) are not yet in the scene’s entity array. The code that gets the monster to choose to chase the player (changes the goal weight for the interceptGoal) comes near the end of the section Use Multiple Goals, where the reader adds an update method to MonsterEntity.

But, the code to update the adding the monster entities into the scene’s entity array isn’t added until later in the chapter, specifically near the end of the section Update Physics for Monsters and Projectiles. So when the reader first tests picking up the key after adding the chase code, the monsters aren’t going to chase them, because the MonsterEntity's update function won’t be triggered yet. I think just relocating the code block that does that to the earlier section would fix it.

if let scene = ocmponentNode.scene as? GameScene {
    scene.entities.append(monsterEntity)
}
Paradox927

Paradox927

Author and Editor at PragProg

Hello again.

Sorry for the late reply. It’s been a heck of a week! Also, I appreciate the additional information you’ve provided.

So, if I understand this issue correctly, it might be more about clarifying why the code gets added where it does versus moving the code to an earlier section. As of now, I’m not sure which is the right way to go. But that’s OK…

I’ll be doing a final read-through this weekend and will make a note to review this chapter’s organization. If it makes sense to move the code, I’ll do that. If not, I’ll add something to the chapter to clarify the reason why it’s done the way it is.

Until then, I’ll keep this topic “unresolved.”

Talk soon!

Where Next?

Popular Pragmatic Bookshelf topics Top

jon
Some minor things in the paper edition that says “3 2020” on the title page verso, not mentioned in the book’s errata online: p. 186 But...
New
jeffmcompsci
Title: Design and Build Great Web APIs - typo “https://company-atk.herokuapp.com/2258ie4t68jv” (page 19, third bullet in URL list) Typo:...
New
Alexandr
Hi everyone! There is an error on the page 71 in the book “Programming machine learning from coding to depp learning” P. Perrotta. You c...
New
mikecargal
Title: Hands-On Rust (Chapter 11: prefab) Just played a couple of amulet-less games. With a bit of debugging, I believe that your can_p...
New
raul
Hi Travis! Thank you for the cool book! :slight_smile: I made a list of issues and thought I could post them chapter by chapter. I’m rev...
New
rmurray10127
Title: Intuitive Python: docker run… denied error (page 2) Attempted to run the docker command in both CLI and Powershell PS C:\Users\r...
New
gilesdotcodes
In case this helps anyone, I’ve had issues setting up the rails source code. Here were the solutions: In Gemfile, change gem 'rails' t...
New
New
AufHe
I’m a newbie to Rails 7 and have hit an issue with the bin/Dev script mentioned on pages 112-113. Iteration A1 - Seeing the list of prod...
New
SlowburnAZ
Getting an error when installing the dependencies at the start of this chapter: could not compile dependency :exla, "mix compile" failed...
New

Other popular topics Top

PragmaticBookshelf
Stop developing web apps with yesterday’s tools. Today, developers are increasingly adopting Clojure as a web-development platform. See f...
New
Rainer
My first contact with Erlang was about 2 years ago when I used RabbitMQ, which is written in Erlang, for my job. This made me curious and...
New
AstonJ
Thanks to @foxtrottwist’s and @Tomas’s posts in this thread: Poll: Which code editor do you use? I bought Onivim! :nerd_face: https://on...
New
AstonJ
In case anyone else is wondering why Ruby 3 doesn’t show when you do asdf list-all ruby :man_facepalming: do this first: asdf plugin-upd...
New
PragmaticBookshelf
Build highly interactive applications without ever leaving Elixir, the way the experts do. Let LiveView take care of performance, scalabi...
New
rustkas
Intensively researching Erlang books and additional resources on it, I have found that the topic of using Regular Expressions is either c...
New
PragmaticBookshelf
Use WebRTC to build web applications that stream media and data in real time directly from one user to another, all in the browser. ...
New
PragmaticBookshelf
Author Spotlight: VM Brasseur @vmbrasseur We have a treat for you today! We turn the spotlight onto Open Source as we sit down with V...
New
New
First poster: AstonJ
Jan | Rethink the Computer. Jan turns your computer into an AI machine by running LLMs locally on your computer. It’s a privacy-focus, l...
New

Sub Categories: