2012-08-12 11 views
6

बस पहले मैं कहूंगा कि यहां संदर्भ Starling Framework के साथ एक्शनस्क्रिप्ट 3.0 (आईडीई: फ्लैशबिल्डर) है।एएस 3 टाइल मैप प्रतिपादन (1000 टाइल्स के साथ)

तो, मैं एक टाइल मैप बनाना चाहता हूं जिसका उपयोग प्लेटफार्म या कुछ इसी तरह के लिए किया जा सकता है।

मैं 800x600 पिक्सेल चरण पर 8x8 पिक्सेल टाइल्स का उपयोग करना चाहता हूं, और मेरी समस्या यह है कि मुझे नहीं पता कि इन 7500+ टाइल ऑब्जेक्ट्स को नाटकीय रूप से फ़्रेमेट को कम किए बिना मंच में कैसे जोड़ना है।

मुझे पता चला है कि प्रत्येक टाइल ऑब्जेक्ट को प्रारंभ करने से नहीं, प्रदर्शन में गिरावट प्रत्येक टाइल को मंच पर जोड़ने से होती है।

मुझे पता है कि मैं बहुत विशिष्ट जानकारी नहीं दे रहा हूं, लेकिन मैं जो पूछ रहा हूं वह यह है कि प्रदर्शन के नुकसान के बिना मंच पर हजारों स्थैतिक वस्तुओं को आकर्षित करने के लिए एक मानक तरीका है। मुझे लगता है कि एक रास्ता है, और मुझे अभी तक यह अभी तक नहीं मिला है।

अद्यतन:

अपनी तरह की मदद के बाद, मैंने पाया क्या एक महान समाधान लगता है। सबसे पहले मैं पूरे मानचित्र के लिए एक बड़ा बिटमैप डेटा बनाने के लिए और फिर स्क्रीन पर प्रस्तुत करने के लिए copyPixels() और draw() का उपयोग करके एमी के समाधान को कार्यान्वित करना चाहता था। फिर, हालांकि, मैं जानना चाहता था कि क्या स्टार्लिंग इसके बराबर है, क्योंकि अगर स्टार्लिंग को मूल फ्लैश के साथ मिश्रण नहीं करना है तो सबकुछ इतना आसान होगा।

एमी के लिए धन्यवाद, मैंने स्टार्लिंग के रेंडरटेक्चर क्लास में थोड़ा और देखा, और पाया कि इसका "ड्रॉबंडल()" और "ड्रा()" विधियों का उपयोग करके, मैं आसानी से सभी टाइलों को रेंडरटेक्चर में खींच सकता हूं, और फिर रेंडरटेक्चर को एक छवि (स्टार्लिंग की छवि कक्षा) में रखें और फिर उस छवि को स्क्रीन पर जोड़ें।

यह समाधान पहले से कोशिश की गई मूर्खतापूर्ण धीमी समाधानों की तुलना में दस लाख गुना तेज है, जिसमें स्पिटिंग स्प्राइट्स और ऐसे हैं। इसके प्रारंभिक समय में दोनों तेज़ी से और फ्रेमरेट में कोई गिरावट नहीं होती है जबकि रेंडरटेक्चर की छवि स्क्रीन पर होती है।

एक चीज जिसे मैं परीक्षण करना चाहता हूं वह यह है कि गेमप्ले के दौरान टाइल के ग्राफिक्स को अपडेट करना आसान है। कहें, अगर पानी किसी स्रोत (या कुछ) से फैलता है और "घास" टाइल को "पानी" टाइल बनना होता है, तो रेंडरटेक्चर और इसकी छवि किसी प्रकार की अंतराल या प्रदर्शन हिचकी के बिना अपनी उपस्थिति को बदलने में सक्षम होगी। मैं जल्द ही इसका परीक्षण करूंगा।

आपकी मदद के लिए सभी को धन्यवाद!

उत्तर

9

न जोड़ें चरण के लिए कई वस्तुओं है कि। इसके बजाए, अपने चरण के आकार में बिटमैम्डाटा बनाएं और उस पर आकर्षित करने के लिए copyPixels() या draw() का उपयोग करें। Here's an article जो आपको शुरू करना चाहिए। फिर आप उस पोस्ट में सीखे गए अवधारणाओं को ले सकते हैं और कुछ भी सीख सकते हैं जिसे आपको कवर करने की आवश्यकता नहीं है (फ्लैशैंडमैथ।कॉम में पिक्सेल मैनिपुलेशन के बारे में बहुत अच्छे ट्यूटोरियल हैं)

+0

धन्यवाद, इस तरह का एक प्रारंभिक बिंदु जो मुझे सही दिशा में धक्का देता है, वही है जो मुझे चाहिए! – Brucef

+0

आपका स्वागत है :) –

+0

अब मुझे यह पता लगाना है कि मूल फ्लैश डिस्प्ले ऑब्जेक्ट्स का उपयोग स्टार्लिंग फ्रेमवर्क के साथ कैसे काम करता है ... – Brucef

3

आपको उस टाइल को प्रबंधित करने की आवश्यकता है जिसे गेम के चारों ओर स्थानांतरित करने के बाद जोड़ा और निकाला जाना आवश्यक है। केवल स्क्रीन टाइल में जोड़ें जो स्क्रीन के केंद्र के 800 पीएक्स में हैं। एक बार टाइल केंद्र से 800 पीएक्स से अधिक है इसे हटा दें। यह सबकुछ सुचारू रूप से आगे बढ़ना चाहिए। सौभाग्य।

या अपनी टाईल्स को एक बिटमैप में खींचने/प्रतिलिपि बनाने में देखें। आप मूल रूप से अपने टाइल्स को नए बिटमैप पर मुद्रित करेंगे। यहाँ एडोब से एक उदाहरण है:

import flash.display.Bitmap; 
import flash.display.BitmapData; 
import flash.geom.Rectangle; 
import flash.geom.Point; 

var bmd1:BitmapData = new BitmapData(40, 40, false, 0x000000FF); 
var bmd2:BitmapData = new BitmapData(80, 40, false, 0x0000CC44); 

var rect:Rectangle = new Rectangle(0, 0, 20, 20); 
var pt:Point = new Point(10, 10); 
bmd2.copyPixels(bmd1, rect, pt); 

var bm1:Bitmap = new Bitmap(bmd1); 
this.addChild(bm1); 
var bm2:Bitmap = new Bitmap(bmd2); 
this.addChild(bm2); 
bm2.x = 50; 

More Info on the bitmapData class. I think copyPixels is what you are after.

+0

यह एक अलग स्थिति में काम करेगा, लेकिन यहां समस्या यह नहीं है कि मुझे कैमरे की चाल के रूप में टाइल्स जोड़ने/निकालने की आवश्यकता है, लेकिन टाइल्स इतनी छोटी हैं कि मैं प्रदर्शन को छोड़ने के बिना स्क्रीन (7500) भरने के लिए आवश्यक संख्या को बनाने के बारे में नहीं पता। – Brucef

+0

कितने अलग अद्वितीय टाइल्स हैं? क्या आप टाइल के बिटमैपडेटा का नमूना नहीं ले सकते हैं और उन्हें सभी को एक बिटमैप में कॉपी कर सकते हैं। इस तरह आप सिर्फ एक छवि बना रहे हैं लेकिन कई टाइल स्रोतों से। – Boyd

+0

बहुत कम अद्वितीय टाइल्स (16 से कम) हैं, और ऐसा लगता है जैसे यह काम कर सकता है, लेकिन मैं – Brucef