السلام عليكم ورحمة الله وبركاته
أخواني الأفاضل
أنا أواجه مشكلة في برمجة اللعبة تبعي
< المشكلة إني عندي ميثود داخل كلاس لنقل <ب> وهذه الميثود لنقل <هـ> تحتوي على متغير داخلي < د
<يعني كل ماانادي الميثود<هـ>, تنشيء متغير داخلي جديد<د> للكلاس <ب
<ولكن بما أن المتغير<د> ليس عام في الكلاس<ب> بل داخلي للميثود<هـ
<فإني لاأستطيع الرجوع للمتغير<د> من كلاس اخر <ج
<طبعا في حال انشاء نسخة من الكلاس <ب> في -الكلاس <ج
ولحل هذه المشكلة عرفت متغير <و> للكلاس <ب> والمعرف في الفيلد لذلك الكلاس
<بحيث اني اضفت سطر داخل الميثود <هـ> يحفظ قيمة المتغير الداخلي <د> داخل المتغير <و> في كل مرة ندعو الميثود <هـ
<والحمدلله مشي الحال وسرت اقدر ادخل عالمتغير <د
:بس المشكلة التانية اللي بتواجهني حاليا هي
عندما انادي الميثود<هـ> في الكلاس <ج> لأكثر من مرة
commandAction(Command, Item) فإني أحتاج لان اختبر كل نسخة للمتغير <د> في الميثود
<ولكن للأسف فإن الإختبار يتم بناء على قيمة المتغير<د> الأخيرة فقط ويتم مسح جميع القيم الأخرى للمتغير<د
<أعلم أن ذلك بديهي لأن آخر تخزين لقيمة <د> تم في آخر استدعاء للميثود <هـ
ولكن مشكلتي هي ماالحل؟
شكرا جزيلا للاهتمام واتمام القراءة وأأسف للإطالة ولكن لتوضيح المشكلة بشكل أعمق
هنا نسخة من الاكواد اللي فيها المشكلة
الكلاس Button
addButtonToCenter الذي يحوي الميثود <هـ> والتي هنا
import javax.microedition.lcdui.*;
public class Button implements ItemCommandListener
{
protected StringItem item;
public Button(){
item = new StringItem("", null, Item.BUTTON);
}
public void addButtonToCenter(String name,boolean ln, Form form) {
Command cmmd = new Command(name, Command.ITEM, 1);
StringItem item3 = new StringItem(name, null, Item.BUTTON);
item3.setDefaultCommand(cmmd);
item3.setItemCommandListener(this);
int flags = Item.LAYOUT_2 | Item.LAYOUT_CENTER | Item.LAYOUT_EXPAND;
if (ln) flags |= Item.LAYOUT_NEWLINE_AFTER;
item3.setLayout(item3.getLayout() | flags);
item =item3;
form.append(item);
}
public void commandAction(Command c, Item i)
{
if(item.getLabel().equals("Level 1"))
try
{
Start.level1.displayInfo(Start.level1.form);
/**
Form a = new Form("A");
GameMidlet.display.setCurrent(a);
**/
}
catch(Exception e){
String gripe = "Error:" + e;
Alert a = new Alert("Error",gripe,null,AlertType.ERROR);
GameMidlet.display.setCurrent(a);
}
else{
if(item.getLabel().equals("Level 2"))
try
{
Start.level2.displayInfo(Start.level2.form);
/**
Form a = new Form("A");
GameMidlet.display.setCurrent(a);
**/
}
catch(Exception e){
String gripe = "Error:" + e;
Alert a = new Alert("Error",gripe,null,AlertType.ERROR);
GameMidlet.display.setCurrent(a);
}
}
}
}
Start الكلاس
addButtonToCenter هو اللا بيدعو الميثود <هـ> والتي هنا هي الميثود
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author Alla
*/
import javax.microedition.lcdui.*;
public class Start extends GamesScreens
{
protected static Level1 level1;
protected static Level2 level2;
protected static Button button;
protected static StringItem lev1=new StringItem("", null, Item.BUTTON);
protected static StringItem lev2=new StringItem("", null, Item.BUTTON);
public Start()
{
super("Start");
button = new Button();
button.addButtonToCenter("Level 1",false, form);
//lev1 = button.item;
button.addButtonToCenter("Level 2",false, form);
//lev2 = button.item;
level1 = new Level1();
level2 = new Level2();
}
}
يمكن تلاحظو السطرين المحذوفة
//lev1 = button.item;
//lev2 = button.item;
item والتي حاولت فيها حفظ قيمة المتغير <د> والتي هنا
Button داخل المتغير العام lev1 للكلاس <ب> والذي هنا
Level 1ولكنها فشلت فعندما اضغط على الزر Level 1 او الزر Level 2 فكليهما يقودني لللكلاس
شكرا جزيلا وعفوا على الإطالة
في انتظار الردود والمشاركات من الجميع
وجزى الله الجميع خيرا