الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

التنقل بين الصفحات بدون كوماند بوتن

بدأه myoosa في 21 ديسمبر 2010 · 8 رد · 721 مشاهدة · في JavaME
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم يا جماعة

جيالكم اليوم بسؤال جديد

انا بعمل لعبة و بحاول أنقل من المرحلة الأولى إلى المرحلة التانية

هلأ انا عندي 1 Game maneger :يحوي خصائص المرحلتين

ف بدي أحكيلو على سبيل المثال

if(score == 200)
        {
            try {
            gameCanvas2 = new SSGameCanvas2();
                    gameCanvas2.start(); // start game thread
            Display.getDisplay(null).setCurrent(gameCanvas2);
            // start sounds
            InputStream in = getClass().getResourceAsStream("/resource/Jungle_Scream.wav");
            player = Manager.createPlayer(in,"audio/x-wav");
            player.setLoopCount(1);
            player.start();

        } catch (MediaException ex) {
            ex.printStackTrace();
        }

بس مش ما بتشتغل ..

و لو حطيتها بال MainMidlet

بتشتغل المرحلة الأولى لمدة ثانية و بعدها عطول بتشتغل المرحلة الثانية .. و ليس هذا هو المطلوب !

يا ترا حد ممكن يساعد ؟؟

#2
Display.getDisplay(this).setCurrent(gameCanvas2);

طبعا لا استطيع الحكم على الكود لان الكود المرفق لا يفيد

#3
.S.T.A.L.K.E.R كتب:

Display.getDisplay(this).setCurrent(gameCanvas2);

طبعا لا استطيع الحكم على الكود لان الكود المرفق لا يفيد

أشكر ردك أخي الكريم بس في

//Display.getDisplay(this).setCurrent(gameCanvas2);

جربتها قبل ما أحط السؤال تبعي ..

لكن طلعلي فيها الإرور التالي

getDisplay(javax.microedition.midlet.MIDlet) in javax.microedition.lcdui.Display cannot be applied to (main.GameManager)

Display.getDisplay(this).setCurrent(gameCanvas2);

عندك فكرة ليش؟ عشان هيك انا غيرت ال this to null

تم تعديل هذه المشاركة بواسطة myoosa في 21 ديسمبر 2010 في 20:12

#4

يجب ان تمرر لها كائن من نوع MIDlet

اي ال MIDlet الرئيسية

مثلا في الMIDlet ضع كائن public static MIDlet و اجعله يؤشر على ال MIDlet الرئيسية

مثلا

public MainMIDlet(){
MY_MIDLET=this;//جيث mymidlet هو كائن من نوع MIDlet و static و public
};

و تستدعي هذا الكائن من خلال

MainMIDlet.MY_MIDLET

#5
.S.T.A.L.K.E.R كتب:

يجب ان تمرر لها كائن من نوع MIDlet

اي ال MIDlet الرئيسية

مثلا في الMIDlet ضع كائن public static MIDlet و اجعله يؤشر على ال MIDlet الرئيسية

مثلا

public MainMIDlet(){
MY_MIDLET=this;//جيث mymidlet هو كائن من نوع MIDlet و static و public
};

و تستدعي هذا الكائن من خلال

MainMIDlet.MY_MIDLET

طيب أخي الكريم معلش أعذرني على الإزعاج .. هلأ ممكن تفترض معاي السيناريو التالي ..

انا عندي ..

I have one Game manager & 1 MIDLET

عملت ميثود بال غيم مانيجر كالتالي ..

   public void g2l2 ( ){
             midlet.ScreenShow(gameCanvas2);

    }

الهدف من هاي الميثود إنو تسمحلي أعمل كول للميثود إلي إسمها screenShow إلي موجودة بالMIDLET

public void ScreenShow() {
        gameCanvas2.start(); // start game thread
            exitCommand = new Command("Exit",Command.EXIT,1);
            gameCanvas2.addCommand(exitCommand);
            gameCanvas2.setCommandListener(this);
           Display.getDisplay(this).setCurrent(gameCanvas2);
        throw new UnsupportedOperationException("Not yet implemented");
    }

iهلأ استخدمت g2l2 بالطريقة التالية

 if(score == 200)
        {
             g2l2();
}

يعني لو سمحت لما يصير السكور 200 نادي الميثود إلي إسمها g2l2 إلي بدورها رح تروح اتنادي الميثود إلي إسمها ScreenShow إلي موجودة بالمدلت و تظهر محتويات الصفحة التانية

هلأ ككود ما عندي أخطاء .. لكن أول ما يصير السكور 200 لا يتم الإنتقال .. بس بتتوقف اللعبة ..يعني بتصير كإنك عملتلها بوز ..

يا ترى الكود تبعي في إشي لوجكلي خطأ ؟ ولا كيف ؟

نشكر لكم تعاونكم و جعله الله في ميزان حسناتكم يارب

#6
اقتباس
هلأ ككود ما عندي أخطاء

أشك في ذلك, لقد استدعيتي

midlet.ScreenShow(gameCanvas2);

وهذه ال method لا تستقبل متغيرات في التعريف الذي وضعتيه.

ثم عليك حذف هذا السطر من ال method لأنه سيسبب رمي استثناء في كل الأحوال

throw new UnsupportedOperationException("Not yet implemented");
#7
مهدي حجازي كتب:

أشك في ذلك, لقد استدعيتي

midlet.ScreenShow(gameCanvas2);

وهذه ال method لا تستقبل متغيرات في التعريف الذي وضعتيه.

ثم عليك حذف هذا السطر من ال method لأنه سيسبب رمي استثناء في كل الأحوال

throw new UnsupportedOperationException("Not yet implemented");

مم طيب كلامك منطقي بس مش عارفة ليش مش راضي يزبط ؟

طيب هلأ هل قوانين المنتدى تسمح إنكم تعرضولي مثال .. يحوي 2 مدلت مربوطين ببعض

أو أي مثال ينقل من سكرين ل سكرين ؟

أو حتى إذا بنفع أعمل أعرض الكود تبعي بحيث يتم التعديل عليه ؟؟؟

#8
myoosa كتب:

طيب هلأ هل قوانين المنتدى تسمح إنكم تعرضولي مثال .. يحوي 2 مدلت مربوطين ببعض

أو أي مثال ينقل من سكرين ل سكرين ؟

أو حتى إذا بنفع أعمل أعرض الكود تبعي بحيث يتم التعديل عليه ؟؟؟

القوانين تسمح بذلك

اذا كان الكود خاص بكى

Software Developer
Mahmoudkelany.com


 

#9

ممتاز رح أبدأ بالغيم مانيجر

بسم الله

public class GameManager extends LayerManager {
public GameManager(int x, int y, int height, int width, SSGameCanvas theCanvas) throws IOException {


        super();

        this.canvasX = x;
        this.canvasY = y;
        this.height = height;
        this.width = width;
        this.gameCanvas = theCanvas;
        //setViewWindow();
        setViewWindow(leftPosX, leftPosY, width, height);

        //---------------------------------------------------------------------
        // LOAD SHIP
        //---------------------------------------------------------------------
        // load ship image
        shipImage = Image.createImage(SHIP_IMAGE);
        // create space ship
        ship = new SpaceShip(shipImage, SHIP_WIDTH, SHIP_HEIGHT);
        try {
            InputStream in = getClass().getResourceAsStream("/resource/shoting.wav");
            player = Manager.createPlayer(in, "audio/x-wav");
            player.setLoopCount(1);
        } catch (MediaException ex) {
            ex.printStackTrace();
        }
        // set it position
        ship.setRefPixelPosition(height / 2, width / 2);
        this.append(ship);
        bulletImage = Image.createImage(BULLET_IMAGE);
        bullet = new Bullet(bulletImage, BULLET_WIDTH, BULLET_HEIGHT);
        ship.initBullet(bulletImage, BULLET_WIDTH, BULLET_HEIGHT);
        //-------------------------------------------------------------------
        // LOAD STARS
        //-------------------------------------------------------------------
        starImage = Image.createImage(STAR_IMAGE);
    }
public GameManager(int x, int y, int height, int width, SSGameCanvas2 theCanvas) throws IOException {
        super();
        this.canvasX = x;
        this.canvasY = y;
        this.height = height;
        this.width = width;
        this.gameCanvas2 = theCanvas;

        setViewWindow(leftPosX, leftPosY, width, height);

        /*
        ---------------------------------------------------------------------
        LOAD Monkey
        ---------------------------------------------------------------------
         */
        monkImage = Image.createImage(monk_IMAGE);
        monk = new Monkey(monkImage, monk_WIDTH, monk_HEIGHT);
        // set it position
        monk.setRefPixelPosition(120, 260);
        this.append(monk);



        //-------------------------------------------------------------------
        // LOAD Coconut
        //-------------------------------------------------------------------
        cocoImage = Image.createImage(coco_IMAGE);
    }
public void paint(Graphics g) throws IOException, InterruptedException {
        // paint graphics
        paint(g, canvasX, canvasY);
        // draw full health bar
        g.setColor(255, 255, 250); // r
        g.fillRect(canvasX, canvasY, width / 2, 10);
        // draw current health bar
        g.setColor(102, 51, 102); // yellow
        if (ship.getHPPercentage() >= 0) {
            g.fillRect(canvasX + 1, canvasY + 1, convert2Long((ship.getHPPercentage()) * (width / 2)), 9);
        }
        // draw score
        g.setColor(255, 244, 51);
        g.drawString("" + score, width - 20, 10, g.TOP | g.LEFT);
        if (GameOver) {
            endGame(g);
        }

    }

    public void paint_2(Graphics g) {
        // paint graphics

        paint(g, canvasX, canvasY);
        // draw full health bar
        g.setColor(255, 255, 250); // r
        g.fillRect(canvasX, canvasY, width / 2, 10);
        // draw current health bar
        g.setColor(230, 40, 40);
        if (monk.getHPPercentage() >= 0) {
            g.fillRect(canvasX + 1, canvasY + 1, convert2Long((monk.getHPPercentage()) * (width / 2)), 9);
        }
    public void advance(int ticks) {
        //if (GameOver) return;
        int keyState = gameCanvas.getKeyStates();
        // turn shift to right
        if ((keyState & GameCanvas.RIGHT_PRESSED) != 0) {
            ship.moveRight(width);
        }
        // turn shift to left
        if ((keyState & GameCanvas.LEFT_PRESSED) != 0) {
            ship.moveLeft();
        }
        // move up
        if ((keyState & GameCanvas.UP_PRESSED) != 0) {
            ship.moveUp();
        }
        // slow down
        if ((keyState & GameCanvas.DOWN_PRESSED) != 0) {
            ship.moveDown(height);
        }
        // fire
        if ((keyState & GameCanvas.FIRE_PRESSED) != 0) {
            try {
                newBullet = ship.fire(ticks); // fire new bullet
                // throw old bullet away
                if (newBullet != null) {
                    try {

                        player.stop();
                        player.setLoopCount(1);
                        player.start();
                    } catch (MediaException ex) {
                        ex.printStackTrace();
                    }
                    this.remove(bullet);
                    bullet = newBullet;
                    this.append(bullet);
                }
            } catch (java.lang.NullPointerException e) {
                e.printStackTrace();
            }
            System.out.println(" Object created");
        }

        // create new star if the old has disappeared
        try {
            createObstacle(ticks);
        } catch (java.lang.ArrayIndexOutOfBoundsException e) {
            e.printStackTrace();
        }

        if (bullet != null) {
            bullet.advance(ticks);
        }
        if (!bullet.isAppear()) {
            this.remove(bullet);
        }
        // advance ship
        ship.advance(ticks);

        // checking collision
        // ship's collision with stars
        t = checkCollisionWithStars(ship);
        if (t != null) {
            this.remove(t); // remove collided star
            t.destroy(); //destroy star
            // if collised
            ship.collised(ticks, t.getDamage());
        }
        // bullet's collision with star
        t = checkCollisionWithStars(bullet);
        if (t != null && bullet.isAppear()) {
            score += t.getScore(); // increase score

            this.remove(t); // remove collided star
            t.destroy(); //destroy star
            bullet.destroy();// remove bullet
            this.remove(bullet);
        }
        //if ship is destroyed
        if (ship.isDestroyed()) {
            this.remove(ship); //
            GameOver = true;
        }
        // scanf for star collision
        for (int i = 0; i < MAX_OBS; i++) {
            // if object is not null
            if ((obs != null)) {
                t = this.checkCollisionWithStars(obs);
                // if there is collision
                if (t != null) {
                    if (t != obs)// if it does not collided to itself
                    // reversed direction
                    {
                        if (obs.getSpeedX() * t.getSpeedX() > 0) {
                            //
                            if ((obs.getRefPixelY() + obs.getHEIGHT()) - (t.getRefPixelY() - t.getHEIGHT()) <= 0) {
                                if (obs.getSpeedY() > 1) {
                                    obs.setSpeedY(obs.getSpeedY() - 1);
                                }
                                t.setSpeedY(t.getSpeedY() + 1);
                            }

                            if (obs.getRefPixelX() >= t.getRefPixelX()) {
                                obs.setSpeedX(-obs.getSpeedX());
                                t.setSpeedX(t.getSpeedX() + 1);
                            } else {
                                t.setSpeedX(-t.getSpeedX());
                                obs.setSpeedX(obs.getSpeedX() + 1);
                            }
                        } else {
                            obs.setSpeedX(-obs.getSpeedX());
                            t.setSpeedX(-t.getSpeedX());
                        }
                    }
                }
            }
            if (score == 500) {

                try {
                     NewLevel();
                } catch (Exception e) {
                    System.out.println("ddnt WORK");
                }



            }
        }
    }
public void NewLevel() {
midlet.ShowNextLevel();



    }

}

بالنسبة للمين ..

public class MainMidlet extends MIDlet implements CommandListener {

    public Display display;
    public SSGameCanvas gameCanvas;
    public SSGameCanvas2 gameCanvas2;
    private Command exitCommand;
    private Player player = null;
    GameManager gameManager;

    public MainMidlet() {
    }

    public void startApp() {
        try {
            //create new game thread
            gameCanvas = new SSGameCanvas();
            gameCanvas.start(); // start game thread
            exitCommand = new Command("Exit", Command.EXIT, 1);
            gameCanvas.addCommand(exitCommand);
            gameCanvas.setCommandListener(this);
            Display.getDisplay(this).setCurrent(gameCanvas);


        } catch (java.io.IOException e) {

            e.printStackTrace();
        }




        try {
            // start sounds
            InputStream in = getClass().getResourceAsStream("/resource/startfly.wav");
            player = Manager.createPlayer(in, "audio/x-wav");
            player.setLoopCount(1);
            player.start();

        } catch (MediaException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        }



    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
        if (player != null) {
            player.close();
        }
        System.gc();
    }

    public void commandAction(Command command, Displayable displayable) {
        if (command == exitCommand) {
            destroyApp(true);
            notifyDestroyed();
        }
    }
    public Display getDisplay() {
        return display;
    }

    public void ShowNextLevel() {
        try {

            gameCanvas2 = new SSGameCanvas2();
            gameCanvas2.start(); // start game thread
            exitCommand = new Command("Exit", Command.EXIT, 1);
            gameCanvas2.addCommand(exitCommand);
            gameCanvas2.setCommandListener(this);
            Display.getDisplay(this).setCurrent(gameCanvas2);

        } catch (java.io.IOException e) {
            System.out.println("Now we are here !");
            e.printStackTrace();

        }


    }
}

طبعا ما وضعت كل الكود بس يعني حاولت أختصير بطريقة تقدرو تفهمو علي

هلأ لما عملت تريس

أول ما يوصل لهاي المرحلة

midlet.ShowNextLevel();

على طول بروح على الكاتش و ما بروح على المين مدلت ؟

يعني كتير غريب أي حد عندو فكرة أو طريقة حل أو ما إلى ذلك ؟

مواضيع مشابهة