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!

Popular Pragmatic Bookshelf topics Top

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
conradwt
First, the code resources: Page 237: rumbl_umbrella/apps/rumbl/mix.exs Note: That this file is missing. Page 238: rumbl_umbrella/app...
New
leba0495
Hello! Thanks for the great book. I was attempting the Trie (chap 17) exercises and for number 4 the solution provided for the autocorre...
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
jwandekoken
Book: Programming Phoenix LiveView, page 142 (157/378), file lib/pento_web/live/product_live/form_component.ex, in the function below: d...
New
andreheijstek
After running /bin/setup, the first error was: The foreman' command exists in these Ruby versions: That was easy to fix: gem install fore...
New
dtonhofer
@parrt In the context of Chapter 4.3, the grammar Java.g4, meant to parse Java 6 compilation units, no longer passes ANTLR (currently 4....
New
mcpierce
@mfazio23 I’ve applied the changes from Chapter 5 of the book and everything builds correctly and runs. But, when I try to start a game,...
New

Other popular topics Top

Devtalk
Reading something? Working on something? Planning something? Changing jobs even!? If you’re up for sharing, please let us know what you’...
1021 17027 374
New
PragmaticBookshelf
A PragProg Hero’s Journey with Brian P. Hogan @bphogan Have you ever worried that your only legacy will be in the form of legacy...
New
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
AstonJ
Curious to know which languages and frameworks you’re all thinking about learning next :upside_down_face: Perhaps if there’s enough peop...
New
New
AstonJ
I have seen the keycaps I want - they are due for a group-buy this week but won’t be delivered until October next year!!! :rofl: The Ser...
New
Margaret
Hello everyone! This thread is to tell you about what authors from The Pragmatic Bookshelf are writing on Medium.
1134 25392 752
New
AstonJ
Saw this on TikTok of all places! :lol: Anyone heard of them before? Lite:
New
PragmaticBookshelf
Build efficient applications that exploit the unique benefits of a pure functional language, learning from an engineer who uses Haskell t...
New
PragmaticBookshelf
Author Spotlight: Bruce Tate @redrapids Programming languages always emerge out of need, and if that’s not always true, they’re defin...
New