3.7 Texture Packer位置错乱

tps文件里面增加一张图片,导出新的plist和png文件后覆盖到项目中,会发现项目里的切图全部错乱了。
图片文件和配置文件确实更新了,但看上去像是引擎用了新的plist和旧的png文件(或者旧的plist和新的png文件)

1赞

3.6.3是好的,3.7就会有这个问题。
另外3.7设置“图片导入默认类型”没有用,即使你设置成sprite-frame,新导进来的图片还是texture

另外,如果把新的plist和png放到一个单独的文件夹里,所有的切图都是正确的。
只有覆盖旧的会导致这个错乱问题

找到问题了,plist和png更新之后,plist.meta在更新时只增加了你新增的一张图片的位置大小等信息,而不是根据plist更新整个meta,这个怎么解决目前没有头绪,大概只能手动改一遍?

截图中可以看到,同一个切图在plist文件中的位置信息更新了,但plist.meta中的信息没有更新

怎么覆盖的?直接拖进编辑器还是?

文件夹里面覆盖,然后在编辑器里刷新


复现了,已经建立 issue 进行处理,感谢反馈

是的 我现在每次加图片还要删了重新拖UI

手撸了一个修复脚本,语言是go,发上来造福一下苦逼开发者吧
package main

import (

    "bufio"

    "encoding/json"

    "fmt"

    "io/ioutil"

    "os"

)

type Config struct {

    FileName   string

    StartLine  int

    SecondLine int

    EndLine    int

}

func main() {

    config, err := ioutil.ReadFile("config.json")

    if err != nil {

        panic(err)

    }

    var cfg Config

    json.Unmarshal(config, &cfg)

    // 打开源文件和目标文件

    srcFile, err := os.Open(cfg.FileName + ".old")

    if err != nil {

        panic(err)

    }

    defer srcFile.Close()

    dstFile1, err := os.Open(cfg.FileName + ".new")

    if err != nil {

        panic(err)

    }

    defer dstFile1.Close()

    // dstFile, err := os.Create("target.txt")

    // if err != nil {

    //  panic(err)

    // }

    // defer dstFile.Close()

    // 指定需要替换的行号

    var num = []int{}

    for i := cfg.StartLine; i <= cfg.EndLine; i += cfg.SecondLine - cfg.StartLine {

        num = append(num, i)

        num = append(num, i+1)

        num = append(num, i+2)

        num = append(num, i+3)

        num = append(num, i+4)

        num = append(num, i+5)

        num = append(num, i+6)

        num = append(num, i+7)

        num = append(num, i+8)

    }

    var idx = 0

    // 逐行读取源文件

    scanner := bufio.NewScanner(srcFile)

    dicScanner := bufio.NewScanner(dstFile1)

    var lines []string

    for scanner.Scan() && dicScanner.Scan() {

        idx += 1

        if contains(num, idx) {

            lines = append(lines, dicScanner.Text())

        } else {

            lines = append(lines, scanner.Text())

        }

    }

    if err := scanner.Err(); err != nil {

        panic(err)

    }

    fmt.Println(lines)

    fmt.Println("lines")

    dstFile, err := os.Create(cfg.FileName)

    if err != nil {

        panic(err)

    }

    defer dstFile.Close()

    // 将目标文件中需要替换的行替换为结果变量中的内容

    writer := bufio.NewWriter(dstFile)

    for _, line := range lines {

        fmt.Fprintln(writer, line)

    }

    if err := writer.Flush(); err != nil {

        panic(err)

    }

    fmt.Println("Done.")

}

func contains(s []int, e int) bool {

    for _, a := range s {

        if a == e {

            return true

        }

    }

    return false
}

$E%Z{`(ATXY_YEJX93CDPU

1.在cocos里随便哪个地方新建一个tmp文件夹,导入新的plist图集文件,回到cocos生成新的meta文件。给他添加后缀.new

2.用新的plist图集文件覆盖旧的,回到cocos确保更新meta文件。此时cocos里是错乱的,这个错乱的plist图集文件的meta文件,给他添加后缀.old

3.步骤23的两个文件放到编译后的exe文件同一目录下

4.修改配置文件config.json
startLine是第一个rotate字段的行数(新旧文件行数都是一样的)
secondLine是第二个rotate字段的行数
endLine 是第最后一个rotate字段的行数

思路就是替换行,plist文件的meta文件里之前存在的图片的宽高旋转这些信息不会更新。
用新生成的对的行替换不对的行。
rotate行数见下图

挖坟鞭尸,这个还没有解决呢。