เกม cocos2d พื้นผิวระบบ ccparticle เกิดความยุ่งเหยิง

เกมของฉันใช้ระบบอนุภาคหลายระบบ ทุกครั้งที่ฉันใช้ระบบอนุภาคแรก เช่น stars.plist อนุภาคถัดไปที่จะแสดงจะใช้พื้นผิวของ stars.plist (ดังนั้นหากอนุภาคต่อไปคือฝน ฝนก็จะเป็นฝนดาวฤกษ์ :( ฉันใช้ [ARCH_OPTIMAL_PARTICLE_SYSTEM particleWithFile: @""] เช่น:

CCParticleSystem* rain = [ARCH_OPTIMAL_PARTICLE_SYSTEM particleWithFile:@"rain.plist"];
[self addChild:rain z:-1];

และก่อนที่จะเริ่มต้นฝน ฉันจำเป็นต้องโหลดอนุภาคล่วงหน้าโดยใช้:

[ARCH_OPTIMAL_PARTICLE_SYSTEM particleWithFile:@"rain.plist"];

ถ้าอนุภาคต่อไปของฉันที่จะเล่นคือ meteor.plist พื้นผิวที่ใช้ก็จะยังคงเป็นพื้นผิวของ rain.plist

ฉันใช้วิธีเดียวกันในการแสดงดาวตก:

    NSString* fn = [NSString stringWithFormat:@"meteor%i.plist", random];
    CCParticleSystem* meteor = [ARCH_OPTIMAL_PARTICLE_SYSTEM particleWithFile:fn];

ฉันได้ลองใช้ CCParticleQuad และ CCParticlePoint ทั้งบน 3gs และ iPhone 4 และโปรแกรมจำลองแล้ว แต่ยังคงเป็นปัญหาเดียวกัน


person OMGPOP    schedule 02.02.2012    source แหล่งที่มา
comment
คุณจะให้พื้นผิวได้อย่างไร? มันถูกเข้ารหัสในไฟล์ .plist หรือเป็นไฟล์แยกต่างหาก ฉันเคยมีปัญหาคล้ายกันกับพื้นผิวที่ฝังอยู่ใน plist มาก่อน นั่นเป็นเหตุผลที่ฉันถาม   -  person bummzack    schedule 02.02.2012
comment
ถ้าอย่างนั้นคุณเปลี่ยนเป็นไฟล์ที่แยกจากกันและมันก็ใช้งานได้เหรอ?   -  person OMGPOP    schedule 02.02.2012


คำตอบ (1)


หากข้อมูลพื้นผิวถูกฝังอยู่ภายในไฟล์ .plist cocos2d จะแยกข้อมูลนั้นและจัดเก็บเป็นพื้นผิวภายใน พื้นผิวจะถูกจัดเก็บโดยมีชื่อไฟล์พื้นผิวเป็นคีย์ ดังนั้นหากคุณมีระบบอนุภาคสองระบบที่ใช้ชื่อไฟล์พื้นผิวเดียวกันภายใน พื้นผิวที่โหลด อันดับแรก จะถูกนำไปใช้กับการใช้งานในภายหลังทั้งหมด ชื่อไฟล์พื้นผิวเดียวกัน!

วิธีง่ายๆ ในการตรวจสอบคือการดูไฟล์ .plist ของคุณแล้วค้นหาด้วยปุ่ม textureFileName คีย์นี้ควรจะแตกต่างกันสำหรับแต่ละพื้นผิว เนื่องจากข้อมูลรูปภาพถูกฝังอยู่ในไฟล์ .plist ของคุณ คุณสามารถเปลี่ยนค่านี้เป็นอะไรก็ได้ที่คุณต้องการ.. เช่น starparticle.png สำหรับดวงดาวของคุณ rainparticle.png สำหรับสายฝน ฯลฯ เพียงใช้สิ่งที่ไม่ซ้ำใครสำหรับพื้นผิวที่ไม่ซ้ำใคร

หากล้มเหลว คุณยังสามารถใช้พื้นผิวด้วยตนเองได้ โดยการโหลดจากไฟล์ในลักษณะนี้:

[rain setTexture: [[CCTextureCache sharedTextureCache] addImage:"particleTexture.png"]];
person bummzack    schedule 02.02.2012
comment
การใช้อนุภาคของฉันบางส่วน (null).tiff เป็น textureFileName ฉันควรทำอย่างไรดี? - person OMGPOP; 02.02.2012
comment
@ Let'sSpotIt เพียงแก้ไขไฟล์และตั้งชื่อไฟล์ที่ไม่ซ้ำกันให้กับแต่ละพื้นผิว ... ตามที่ฉันเขียนไว้ในคำตอบ เช่น. rainparticle.png สำหรับระบบอนุภาคฝน และ starparticle.png ในระบบอนุภาคดาว ฯลฯ... - person bummzack; 02.02.2012
comment
ฉันเปลี่ยนมันแล้วและมันก็ใช้งานได้ ฉันสงสัยว่าเหตุใดตัวออกแบบอนุภาคจึงตั้งค่าพื้นผิวให้มีชื่อเดียวกัน - person OMGPOP; 02.02.2012