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

johnp
Running the examples in chapter 5 c under pytest 5.4.1 causes an AttributeError: ‘module’ object has no attribute ‘config’. In particula...
New
belgoros
Following the steps described in Chapter 6 of the book, I’m stuck with running the migration as described on page 84: bundle exec sequel...
New
yulkin
your book suggests to use Image.toByteData() to convert image to bytes, however I get the following error: "the getter ‘toByteData’ isn’t...
New
New
leonW
I ran this command after installing the sample application: $ cards add do something --owner Brian And got a file not found error: Fil...
New
jskubick
I think I might have found a problem involving SwitchCompat, thumbTint, and trackTint. As entered, the SwitchCompat changes color to hol...
New
nicoatridge
Hi, I have just acquired Michael Fazio’s “Kotlin and Android Development” to learn about game programming for Android. I have a game in p...
New
jskubick
I found an issue in Chapter 7 regarding android:backgroundTint vs app:backgroundTint. How to replicate: load chapter-7 from zipfile i...
New
digitalbias
Title: Build a Weather Station with Elixir and Nerves: Problem connecting to Postgres with Grafana on (page 64) If you follow the defau...
New
ggerico
I got this error when executing the plot files on macOS Ventura 13.0.1 with Python 3.10.8 and matplotlib 3.6.1: programming_ML/code/03_...
New

Other popular topics Top

Exadra37
Please tell us what is your preferred monitor setup for programming(not gaming) and why you have chosen it. Does your monitor have eye p...
New
DevotionGeo
I know that -t flag is used along with -i flag for getting an interactive shell. But I cannot digest what the man page for docker run com...
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
Just done a fresh install of macOS Big Sur and on installing Erlang I am getting: asdf install erlang 23.1.2 Configure failed. checking ...
New
Exadra37
I am asking for any distro that only has the bare-bones to be able to get a shell in the server and then just install the packages as we ...
New
Maartz
Hi folks, I don’t know if I saw this here but, here’s a new programming language, called Roc Reminds me a bit of Elm and thus Haskell. ...
New
PragmaticBookshelf
Build modern server-driven web applications using htmx. Whatever programming language you use, you’ll write less (and cleaner) code. ...
New
sir.laksmana_wenk
I’m able to do the “artistic” part of game-development; character designing/modeling, music, environment modeling, etc. However, I don’t...
New
AstonJ
This is cool! DEEPSEEK-V3 ON M4 MAC: BLAZING FAST INFERENCE ON APPLE SILICON We just witnessed something incredible: the largest open-s...
New
NewsBot
Node.js v22.14.0 has been released. Link: Release 2025-02-11, Version 22.14.0 'Jod' (LTS), @aduh95 · nodejs/node · GitHub
New

Sub Categories: