Any way to attach image AND string to the image in an array?

Is there a way to attach an image and a string to it in an array? This would help a lot for games that have lots of bad guys!

2 Likes

I assume you’re doing an array that has both the enemy’s sprite and name? I haven’t managed to make that work in any way but you could just do separate arrays

5 Likes

in JS you can do something like:

const enemies = [
    [assets.image`enemy1`, "enemy 1"],
    [assets.image`enemy2`, "enemy 2"],
    [assets.image`enemy3`, "enemy 3"]
]
const enemySprites: Sprite[] = []

for (const enemy of enemies) {
    const enemySprite = sprites.create(enemy[0] as Image, SpriteKind.Enemy)
    enemySprite.data = enemies[1] as string
    enemySprites.push(enemySprite)
}

or:

interface rawEnemy = { image: Image, name: string }
const enemies = [
    { image: assets.image`enemy1`, name: "enemy 1" },
    { image: assets.image`enemy2`, name: "enemy 2" },
    { image: assets.image`enemy3`, name: "enemy 3" }
]
const enemySprites: Sprite[] = []

for (const enemy of enemies) {
    const enemySprite = sprites.create(enemy.image, SpriteKind.Enemy)
    enemySprite.data = enemies.name
    enemySprites.push(enemySprite)
}

in js, I don’t think you can do much unless somebody makes a to type function (currently trying)

2 Likes

If you’re using blocks, you could use @richard 's better-sprite-data extension:

I haven’t tested it out for objects, but it does say on the awesome arcade that it “expands upon the built-in sprite data extension by providing more types including tilemap locations, functions, and the array versions of the base types that can be stored not only on sprites but also the tilemap locations on the current tilemap and an “object”, replacing the arcade-block-objects extension.”

If you’re using like JS/TS you can just use an interface like this:

interface EnemyData {
    name: string
    image: Image
    health: number
    damage: number
    speed: number
}
//----
let enemyTypes: EnemyData[] = [
    {
        name: "Goblin",
        image: img`...`,
        health: 20,
        damage: 5,
        speed: 80
    },
    {
        name: "Slime",
        image: img`...`,
        health: 10,
        damage: 2,
        speed: 40
    },
    {
        name: "Knight",
        image: img`...`,
        health: 100,
        damage: 20,
        speed: 30
    }
]
1 Like

you know js right because u made an extension so use classes

Hmm.. I’ve never seen the improved sprite data extension. Can’t wait to try it out!

4 Likes

Me say hello, me now say goodbyeMe say hello, me now say goodbye. :face_without_mouth:

2 Likes