Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
EduardSakhnovic
0 / 0 / 0
Регистрация: 10.04.2015
Сообщений: 69
#1

Поставить игру на паузу и продолжить с этого же места - Android

03.08.2015, 15:19. Просмотров 563. Ответов 19
Метки нет (Все метки)

В игре,которую я строю,хочу создать кнопку продолжить.
Как мне сохранить данные,чтобы нажав на эту кнопку,продолжить с того места,где я остановился?Желательно показать код.В инете искал,особо информации нету
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
RodionGork
35 / 35 / 8
Регистрация: 01.08.2015
Сообщений: 111
Записей в блоге: 1
03.08.2015, 15:23     Поставить игру на паузу и продолжить с этого же места #2
Ну тут смотря как вы свои данные организовали. Если весь стейт игры в одном объекте - сериализуйте его и ура. Когда игру продолжите / перезапустите - достанете из хранилища (ну у вас разные вариантые сть куда сохранить) - и обратно десериализуете.

Не знаю как вы искали что ничего не нашли... Популярно делать это через Bundle - вот поглядите
http://stackoverflow.com/questions/2...instance-state
EduardSakhnovic
0 / 0 / 0
Регистрация: 10.04.2015
Сообщений: 69
03.08.2015, 15:57  [ТС]     Поставить игру на паузу и продолжить с этого же места #3
Вся логика игры у меня в классе
Java
1
Game
И также имеется куча других классов
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
04.08.2015, 08:50     Поставить игру на паузу и продолжить с этого же места #4
Цитата Сообщение от RodionGork Посмотреть сообщение
Ну тут смотря как вы свои данные организовали.
Вот так, чего не понятного то
Цитата Сообщение от EduardSakhnovic Посмотреть сообщение
Game
EduardSakhnovic
0 / 0 / 0
Регистрация: 10.04.2015
Сообщений: 69
04.08.2015, 17:52  [ТС]     Поставить игру на паузу и продолжить с этого же места #5
не работает оно с сериализацией
и в логе пишет системные ошибки
а когда я нажимаю на кнопку продолжить,в менюшке,игра начинается с нуля,а не с того места,где игрок остановился
Паблито
2064 / 1806 / 562
Регистрация: 12.05.2014
Сообщений: 6,432
Завершенные тесты: 1
04.08.2015, 18:47     Поставить игру на паузу и продолжить с этого же места #6
код где и логи ошибок?
EduardSakhnovic
0 / 0 / 0
Регистрация: 10.04.2015
Сообщений: 69
04.08.2015, 20:29  [ТС]     Поставить игру на паузу и продолжить с этого же места #7
Кликните здесь для просмотра всего текста
08-04 20:25:03.979 14130-14130/es.eduards.pacman V/Serialization Save Error:﹕ es.eduards.pacman.pcmangame.PacmanCanvas
08-04 20:25:03.979 14130-14130/es.eduards.pacman W/System.err﹕ java.io.NotSerializableException: es.eduards.pacman.pcmangame.PacmanCanvas
08-04 20:25:03.979 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1535)
08-04 20:25:03.979 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1847)
08-04 20:25:03.979 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1689)
08-04 20:25:03.979 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1653)
08-04 20:25:03.979 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:1143)
08-04 20:25:03.979 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:413)
08-04 20:25:03.979 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1241)
08-04 20:25:03.979 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1575)
08-04 20:25:03.979 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1847)
08-04 20:25:03.979 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1689)
08-04 20:25:03.979 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1653)
08-04 20:25:03.979 14130-14130/es.eduards.pacman W/System.err﹕ at es.eduards.pacman.GameActivity.saveObject(GameActivity.java:80)
08-04 20:25:03.979 14130-14130/es.eduards.pacman W/System.err﹕ at es.eduards.pacman.GameActivity.onClick(GameActivity.java:126)
08-04 20:25:03.979 14130-14130/es.eduards.pacman W/System.err﹕ at android.view.View.performClick(View.java:2506)
08-04 20:25:03.979 14130-14130/es.eduards.pacman W/System.err﹕ at android.view.View$PerformClick.run(View.java:9112)
08-04 20:25:03.979 14130-14130/es.eduards.pacman W/System.err﹕ at android.os.Handler.handleCallback(Handler.java:587)
08-04 20:25:03.979 14130-14130/es.eduards.pacman W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:92)
08-04 20:25:03.979 14130-14130/es.eduards.pacman W/System.err﹕ at android.os.Looper.loop(Looper.java:130)
08-04 20:25:03.979 14130-14130/es.eduards.pacman W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:3835)
08-04 20:25:03.979 14130-14130/es.eduards.pacman W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
08-04 20:25:03.979 14130-14130/es.eduards.pacman W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:507)
08-04 20:25:03.979 14130-14130/es.eduards.pacman W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
08-04 20:25:03.979 14130-14130/es.eduards.pacman W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
08-04 20:25:03.979 14130-14130/es.eduards.pacman W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)
08-04 20:25:04.029 14130-14130/es.eduards.pacman V/Serialization Read Error:﹕ Read an exception; java.io.NotSerializableException: es.eduards.pacman.pcmangame.PacmanCanvas
08-04 20:25:04.029 14130-14130/es.eduards.pacman W/System.err﹕ java.io.WriteAbortedException: Read an exception; java.io.NotSerializableException: es.eduards.pacman.pcmangame.PacmanCanvas
08-04 20:25:04.029 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:933)
08-04 20:25:04.029 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2262)
08-04 20:25:04.029 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2217)
08-04 20:25:04.029 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectInputStream.readFieldValues(ObjectInputStream.java:1291)
08-04 20:25:04.029 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:518)
08-04 20:25:04.029 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectInputStream.readObjectForClass(ObjectInputStream.java:1535)
08-04 20:25:04.029 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectInputStream.readHierarchy(ObjectInputStream.java:1443)
08-04 20:25:04.029 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:2112)
08-04 20:25:04.029 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:916)
08-04 20:25:04.029 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2262)
08-04 20:25:04.029 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2217)
08-04 20:25:04.029 14130-14130/es.eduards.pacman W/System.err﹕ at es.eduards.pacman.GameActivity.loadSerializedObject(GameActivity.java:92)
08-04 20:25:04.029 14130-14130/es.eduards.pacman W/System.err﹕ at es.eduards.pacman.GameActivity.onClick(GameActivity.java:127)
08-04 20:25:04.029 14130-14130/es.eduards.pacman W/System.err﹕ at android.view.View.performClick(View.java:2506)
08-04 20:25:04.029 14130-14130/es.eduards.pacman W/System.err﹕ at android.view.View$PerformClick.run(View.java:9112)
08-04 20:25:04.029 14130-14130/es.eduards.pacman W/System.err﹕ at android.os.Handler.handleCallback(Handler.java:587)
08-04 20:25:04.029 14130-14130/es.eduards.pacman W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:92)
08-04 20:25:04.029 14130-14130/es.eduards.pacman W/System.err﹕ at android.os.Looper.loop(Looper.java:130)
08-04 20:25:04.029 14130-14130/es.eduards.pacman W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:3835)
08-04 20:25:04.029 14130-14130/es.eduards.pacman W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
08-04 20:25:04.029 14130-14130/es.eduards.pacman W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:507)
08-04 20:25:04.039 14130-14130/es.eduards.pacman W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
08-04 20:25:04.039 14130-14130/es.eduards.pacman W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
08-04 20:25:04.039 14130-14130/es.eduards.pacman W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)
08-04 20:25:04.039 14130-14130/es.eduards.pacman W/System.err﹕ Caused by: java.io.NotSerializableException: es.eduards.pacman.pcmangame.PacmanCanvas
08-04 20:25:04.039 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1535)
08-04 20:25:04.039 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1847)
08-04 20:25:04.039 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1689)
08-04 20:25:04.039 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1653)
08-04 20:25:04.039 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:1143)
08-04 20:25:04.039 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:413)
08-04 20:25:04.039 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1241)
08-04 20:25:04.039 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1575)
08-04 20:25:04.039 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1847)
08-04 20:25:04.039 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1689)
08-04 20:25:04.039 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1653)
08-04 20:25:04.039 14130-14130/es.eduards.pacman W/System.err﹕ at es.eduards.pacman.GameActivity.saveObject(GameActivity.java:80)
08-04 20:25:04.039 14130-14130/es.eduards.pacman W/System.err﹕ at es.eduards.pacman.GameActivity.onClick(GameActivity.java:126)
08-04 20:25:04.039 14130-14130/es.eduards.pacman W/System.err﹕ ... 11 more
это при нажатии на кнопку новая игра
08-04 20:27:20.189 14130-14130/es.eduards.pacman V/Serialization Retrieve Error >>﹕ Read an exception; java.io.NotSerializableException: es.eduards.pacman.pcmangame.PacmanCanvas
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ java.io.WriteAbortedException: Read an exception; java.io.NotSerializableException: es.eduards.pacman.pcmangame.PacmanCanvas
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:933)
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2262)
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2217)
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectInputStream.readFieldValues(ObjectInputStream.java:1291)
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:518)
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectInputStream.readObjectForClass(ObjectInputStream.java:1535)
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectInputStream.readHierarchy(ObjectInputStream.java:1443)
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:2112)
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:916)
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2262)
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2217)
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ at es.eduards.pacman.GameActivity.retrieveSource(GameActivity.java:104)
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ at es.eduards.pacman.GameActivity.onClick(GameActivity.java:135)
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ at android.view.View.performClick(View.java:2506)
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ at android.view.View$PerformClick.run(View.java:9112)
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ at android.os.Handler.handleCallback(Handler.java:587)
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:92)
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ at android.os.Looper.loop(Looper.java:130)
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:3835)
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:507)
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ Caused by: java.io.NotSerializableException: es.eduards.pacman.pcmangame.PacmanCanvas
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1535)
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1847)
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1689)
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1653)
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:1143)
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:413)
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1241)
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1575)
08-04 20:27:20.189 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1847)
08-04 20:27:20.199 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1689)
08-04 20:27:20.199 14130-14130/es.eduards.pacman W/System.err﹕ at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1653)
08-04 20:27:20.199 14130-14130/es.eduards.pacman W/System.err﹕ at es.eduards.pacman.GameActivity.saveObject(GameActivity.java:80)
08-04 20:27:20.199 14130-14130/es.eduards.pacman W/System.err﹕ at es.eduards.pacman.GameActivity.onClick(GameActivity.java:126)
08-04 20:27:20.199 14130-14130/es.eduards.pacman W/System.err﹕ ... 11 more

Это при нажатии на кнопку продолжить старую игру
Вызовы методов файлов в он-клике в гейм-активити
Вложения
Тип файла: rar Desktop.rar (11.1 Кб, 4 просмотров)
Паблито
2064 / 1806 / 562
Регистрация: 12.05.2014
Сообщений: 6,432
Завершенные тесты: 1
04.08.2015, 20:43     Поставить игру на паузу и продолжить с этого же места #8
все очень печально
для начала сделай простой объект с полями и записывай в них то, что должно сохраниться
а потом сериализируй тот объект...и это не должен быть объект активити или еще что-то в таком роде
EduardSakhnovic
0 / 0 / 0
Регистрация: 10.04.2015
Сообщений: 69
04.08.2015, 21:05  [ТС]     Поставить игру на паузу и продолжить с этого же места #9
А активити я не сериализирую
сериализирую обычный класс
Bend3r
149 / 136 / 18
Регистрация: 29.07.2012
Сообщений: 709
04.08.2015, 22:10     Поставить игру на паузу и продолжить с этого же места #10
Не буду вникать в подробности вашей игры, но допустим:
Есть квадрат который перемещается по 2d плоскости, задача игрока не попадать в ямы которые встречаются ему на пути. И вот на определенном моменте необходимо сохранить игру, вашей задачей является занести в базу данных(к примеру) всю информацию о текущем состоянии объекта (в моем случае это координаты в 2d плоскости и кол-во пройденного пути). Ну а когда вы хотите обратно продолжить игру, вам необходимо создать объекты игры и проинициализировать его теми данными которые вы сохранили. Вариант простой, но рабочей. Выше в комментариях вам говорили о возможности сериализации объекта, и десериализации при продолжении игры.
EduardSakhnovic
0 / 0 / 0
Регистрация: 10.04.2015
Сообщений: 69
05.08.2015, 10:53  [ТС]     Поставить игру на паузу и продолжить с этого же места #11
С эксэпшенами я разобрался,сейчас исключения не выдает.
Только осталась одна проблема,что,когда я нажимаю кнопку продолжить,игра начинается полностью с нуля,как и при нажатии на кнопку начать новую игру
YuraAAA
1565 / 1307 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
05.08.2015, 12:13     Поставить игру на паузу и продолжить с этого же места #12
EduardSakhnovic, Вам нужно самому описывать логику save/restore.
Canvas конечно не сериализуется. Надо сохранять игровые объекты, например, в базу данных. А потом восстанавливать их из БД.
EduardSakhnovic
0 / 0 / 0
Регистрация: 10.04.2015
Сообщений: 69
05.08.2015, 13:41  [ТС]     Поставить игру на паузу и продолжить с этого же места #13
Сохраняю я в бинарный файл.Т.е. кроме функций записи и чтения из файла еще что то надо?
EduardSakhnovic
0 / 0 / 0
Регистрация: 10.04.2015
Сообщений: 69
07.08.2015, 08:40  [ТС]     Поставить игру на паузу и продолжить с этого же места #14
где я могу поизучать исходники игр с использованием сериализации,хотя бы на обычной яве пока,не на андроид?
PaDyra
32 / 32 / 8
Регистрация: 06.01.2012
Сообщений: 142
07.08.2015, 09:44     Поставить игру на паузу и продолжить с этого же места #15
Цитата Сообщение от EduardSakhnovic Посмотреть сообщение
Сохраняю я в бинарный файл.Т.е. кроме функций записи и чтения из файла еще что то надо?
как все печально....
Вот вам дельный совет дали где хранить данные - SQLite, или если несколько полей, то используйте SharedPreferences
Цитата Сообщение от YuraAAA Посмотреть сообщение
EduardSakhnovic, Вам нужно самому описывать логику save/restore.
Canvas конечно не сериализуется. Надо сохранять игровые объекты, например, в базу данных. А потом восстанавливать их из БД.
EduardSakhnovic
0 / 0 / 0
Регистрация: 10.04.2015
Сообщений: 69
08.08.2015, 18:29  [ТС]     Поставить игру на паузу и продолжить с этого же места #16
I think I can use for it also onSaveInstanceState and onRestore.
It sounds be useful for my game

Добавлено через 1 час 49 минут
Цитата Сообщение от PaDyra Посмотреть сообщение
SharedPreferences
не знаю подойдет ли.У меня игра составлена из кучи классов,лежащих в разных пакетах.
Вся логика игры в классе ПакменГейм,и все кнопки в ГеймАктивити.
Как сохранить класс ПакменГейм состоящий из 2000 строчек я тут особо не знаю.

Добавлено через 5 часов 27 минут
Цитата Сообщение от EduardSakhnovic Посмотреть сообщение
SharedPreferences
я сейчас использовал SharedPreferences ,только одно не понятно
когда я нажимаю на Continue,я хочу,чтобы на игровом поле появлялось то кол-во точек,которое осталось после того как я вышел из активити.
может мне в классе в котором игра описана,еще какую нибудь вспомогательную функцию написать.
вот код

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
public  class GameActivity extends Activity implements OnClickListener{
 
    private PacmanGame game;
    private GameView gameView;
    private SharedPreferences sPref;
    final String SAVED_GAME="saved_game";
    private Pacman pacman;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        PacmanGame game = initGame();
        initGameView(game);
        initMainView();
        setVolumeControlStream(AudioManager.STREAM_MUSIC);
    }
 
    @Override
    public void onResume() {
        super.onResume();
        game.resume();
    }
 
    @Override
    public void onPause() {
        game.pause();
        super.onPause();
    }
    @Override
    public void onDestroy(){
        saveGame();
        super.onDestroy();
 
 
    }
 
    private void initMainView() {
        setContentView(R.layout.activity_game);
 
        View newGameButton = findViewById(R.id.new_game_button);
        newGameButton.setOnClickListener(this);
        View continueButton = findViewById(R.id.continue_button);
        continueButton.setOnClickListener(this);
        View aboutButton=findViewById(R.id.about_button);
        aboutButton.setOnClickListener(this);
        View exitButton = findViewById(R.id.exit_button);
        exitButton.setOnClickListener(this);
 
    }
 
    private void initGameView(PacmanGame game) {
        gameView = new GameView(this);
        game.view = gameView;
        gameView.game = game;
    }
 
    private PacmanGame initGame() {
        game = new PacmanGame(this);
 
 
        game.init();
 
        return game;
    }
    private void transitionToGameView() {
        setContentView(gameView);
        gameView.setFocusable(true);
    }
    void saveGame(){
        sPref=getPreferences(MODE_PRIVATE);
        Editor ed=sPref.edit();
        System.out.println("Dots remaining >> "+game.getDotsRemaining());
        ed.putInt(SAVED_GAME,game.getDotsRemaining());
        ed.commit();
        Toast.makeText(this,"Game saved",Toast.LENGTH_SHORT).show();
    }
   void loadGame(){
      sPref=getPreferences(MODE_PRIVATE);
      int savedGame=sPref.getInt(SAVED_GAME,8);
      game.setDotsRemaining(savedGame);
      game.startNewGame();
    }
    @Override
    public void onClick(View v) {
        Intent intent;
        switch (v.getId()) {
            case R.id.new_game_button:
                transitionToGameView();
               game.startNewGame();
                break;
            case R.id.continue_button:
                transitionToGameView();
                loadGame();
                break;
            case R.id.about_button:
                intent=new Intent(this,AboutActivity.class);
                startActivityForResult(intent, RequestCode.REQUEST_CODE_ABOUT);
                break;
            case R.id.exit_button:
                finish();
                break;
        }
 
    }
 
 
}
Да.И если в меню нажимаю на кнопку финиш,выскакивает ошибка,так как сохранить игру я прописал в он дестрой,и эти кейсы хотят чтобы там тоже сoхранение игры было.Как убрать эту ошибку

Добавлено через 1 час 50 минут
Я сохранил текущее состояние игры при помощи SharedPreferences.Только,когда я ее начинаю заново,кол-во набранных очков онулируется.Что еще надо доделатть,чтобы при нажатии на продолжить,показывалось то кол-во очков,что было перед выходом из активити?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
package es.eduards.pacman;
 
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.media.AudioManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.widget.Toast;
 
import java.io.File;
import java.io.InputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
 
import es.eduards.pacman.pcmangame.Pacman;
import es.eduards.pacman.pcmangame.Score;
import es.eduards.pacman.util.RequestCode;
 
 
public  class GameActivity extends Activity implements OnClickListener{
 
    private PacmanGame game;
    private Score score;
    private GameView gameView;
    private SharedPreferences sPref;
    final String SAVED_GAME="saved_game";
    private Pacman pacman;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        PacmanGame game = initGame();
        initGameView(game);
        initMainView();
        setVolumeControlStream(AudioManager.STREAM_MUSIC);
    }
 
    @Override
    public void onResume() {
        super.onResume();
        game.resume();
    }
 
    @Override
    public void onPause() {
        game.pause();
        super.onPause();
    }
    @Override
    public void onDestroy(){
       saveGame();
        super.onDestroy();
 
 
    }
 
    private void initMainView() {
        setContentView(R.layout.activity_game);
 
        View newGameButton = findViewById(R.id.new_game_button);
        newGameButton.setOnClickListener(this);
        View continueButton = findViewById(R.id.continue_button);
        continueButton.setOnClickListener(this);
        View aboutButton=findViewById(R.id.about_button);
        aboutButton.setOnClickListener(this);
        View exitButton = findViewById(R.id.exit_button);
        exitButton.setOnClickListener(this);
 
    }
 
    private void initGameView(PacmanGame game) {
        gameView = new GameView(this);
        game.view = gameView;
        gameView.game = game;
    }
 
    private PacmanGame initGame() {
        game = new PacmanGame(this);
 
 
        game.init();
 
        return game;
    }
    private void transitionToGameView() {
        setContentView(gameView);
        gameView.setFocusable(true);
    }
    void saveGame(){
        sPref=getPreferences(MODE_PRIVATE);
        Editor ed=sPref.edit();
        System.out.println("Score >> "+game.getScore());//for debug only
        ed.putLong(SAVED_GAME, game.getScore());
        ed.commit();
        Toast.makeText(this,"Game saved",Toast.LENGTH_SHORT).show();//for debug only
    }
   void loadGame(){
      sPref=getPreferences(MODE_PRIVATE);
      long savedScore=sPref.getLong(SAVED_GAME, 8);
      game.setScore(savedScore);
 
       System.out.println("Score saved >> "+game.getScore());//for debug only
       Toast.makeText(this,"Game loaded",Toast.LENGTH_SHORT).show();//for debug only
        game.startNewGame();
    }
    @Override
    public void onClick(View v) {
        Intent intent;
        switch (v.getId()) {
            case R.id.new_game_button:
                transitionToGameView();
                 game.startNewGame();
                break;
 
            case R.id.continue_button:
                transitionToGameView();
                loadGame();
                break;
            case R.id.about_button:
               intent=new Intent(this,AboutActivity.class);
                startActivityForResult(intent, RequestCode.REQUEST_CODE_ABOUT);
                break;
            case R.id.exit_button:
 
                finish();
                break;
        }
 
    }
 
 
}
PaDyra
32 / 32 / 8
Регистрация: 06.01.2012
Сообщений: 142
09.08.2015, 14:46     Поставить игру на паузу и продолжить с этого же места #17
Цитата Сообщение от EduardSakhnovic Посмотреть сообщение
кол-во очков,что было перед выходом из активити
у вас же есть переменная в который они хранятся, сохраняете из нее значение, потом восстанавливаете точно так же как и все остальные данные
EduardSakhnovic
0 / 0 / 0
Регистрация: 10.04.2015
Сообщений: 69
10.08.2015, 10:24  [ТС]     Поставить игру на паузу и продолжить с этого же места #18
08-10 10:14:43.129 22383-22383/es.eduards.pacman E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.ClassCastException: java.lang.Integer
at android.app.ContextImpl$SharedPreferencesImpl.getLong(ContextImpl.java:2939)
at es.eduards.pacman.GameActivity.loadGame(GameActivity.java:110)
at es.eduards.pacman.GameActivity.onClick(GameActivity.java:133)
at android.view.View.performClick(View.java:2506)
at android.view.View$PerformClick.run(View.java:9112)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3835)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
at dalvik.system.NativeStart.main(Native Method)
что это может быть?
Паблито
2064 / 1806 / 562
Регистрация: 12.05.2014
Сообщений: 6,432
Завершенные тесты: 1
10.08.2015, 10:54     Поставить игру на паузу и продолжить с этого же места #19
Цитата Сообщение от EduardSakhnovic Посмотреть сообщение
что это может быть?
это сообщение об ошибке
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.08.2015, 19:18     Поставить игру на паузу и продолжить с этого же места
Еще ссылки по теме:

Android Недостаточно места на устройстве
Basic4Android Как реализовать паузу во время выполнения программы
MediaPlayer: как продолжить работу аудио-плеера в фоновом режиме? Android
Android Как правильно сделать паузу в ходе работы приложения?
Сделать паузу перед закрытием AlertDilaog Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
EduardSakhnovic
0 / 0 / 0
Регистрация: 10.04.2015
Сообщений: 69
10.08.2015, 19:18  [ТС]     Поставить игру на паузу и продолжить с этого же места #20
С сохранением текущего состояния игры я разобрался,теперь,когда я нажимаю на копку эбаут,и потом хочу продолжить игру,появляется черный экран без всяких изображений.В чем ошибка?Вот код.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
package es.eduards.pacman;
 
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.media.AudioManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.widget.Toast;
 
 
 
import es.eduards.pacman.pcmangame.Pacman;
import es.eduards.pacman.pcmangame.Score;
import es.eduards.pacman.util.RequestCode;
 
 
public  class GameActivity extends Activity implements OnClickListener{
    private static final String TAG="States";
    private PacmanGame game;
 
    private GameView gameView;
    private SharedPreferences sPref;
    final String SAVED_SCORE="saved_score";
    final String SAVED_LIVE="saved_live";
    final String SAVED_LEVEL="saved_level";
    final String SAVED_GAME="saved_game";
    private Pacman pacman;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        PacmanGame game = initGame();
        initGameView(game);
        initMainView();
        setVolumeControlStream(AudioManager.STREAM_MUSIC);
    }
 
    @Override
    public void onResume() {
        super.onResume();
        game.resume();
        Log.d(TAG, "MainActivity: onResume()");//for debug only
    }
 
    @Override
    public void onPause() {
        game.pause();
        super.onPause();
        saveGame();
        Log.d(TAG, "MainActivity: onPause()");//for debug only
    }
    @Override
    public void onDestroy(){
       saveGame();
        super.onDestroy();
        Log.d(TAG, "MainActivity: onDestroy()");//for debug only
 
    }
 
    private void initMainView() {
        setContentView(R.layout.activity_game);
 
        View newGameButton = findViewById(R.id.new_game_button);
        newGameButton.setOnClickListener(this);
        View continueButton = findViewById(R.id.continue_button);
        continueButton.setOnClickListener(this);
        View aboutButton=findViewById(R.id.about_button);
        aboutButton.setOnClickListener(this);
        View exitButton = findViewById(R.id.exit_button);
        exitButton.setOnClickListener(this);
 
    }
 
    private void initGameView(PacmanGame game) {
        gameView = new GameView(this);
        game.view = gameView;
        gameView.game = game;
    }
 
    private PacmanGame initGame() {
        game = new PacmanGame(this);
 
 
        game.init();
 
        return game;
    }
    private void transitionToGameView() {
        setContentView(gameView);
        gameView.setFocusable(true);
    }
 
    /**
     * Saves the existing mode of the game in order to reload it
     * in the near future
     */
    void saveGame(){
        sPref=getPreferences(MODE_PRIVATE);
        Editor ed=sPref.edit();
        ed.putInt(SAVED_SCORE, game.getScore());
       ed.putInt(SAVED_LEVEL,game.getLevel());
        ed.putInt(SAVED_LIVE,game.getLives());
        ed.commit();
        ed.commit();
        Toast.makeText(this,"Game saved",Toast.LENGTH_SHORT).show();//for debug only
    }
 
    /**
     * Reloads saved game
     */
   void loadGame(){
      sPref=getPreferences(MODE_PRIVATE);
      int savedScore=sPref.getInt(SAVED_SCORE, 8);
      int savedLevel=sPref.getInt(SAVED_LEVEL,9);
      int savedLive=sPref.getInt(SAVED_LIVE,10);
       game.setScore(savedScore);
       game.setLevel(savedLevel);
       game.setLives(savedLive);
       game.startNewGame();
       Toast.makeText(this,"Game loaded",Toast.LENGTH_SHORT).show();//for debug only
 
    }
    @Override
    public void onClick(View v) {
        Intent intent;
        switch (v.getId()) {
            case R.id.new_game_button:
                transitionToGameView();
                 game.startNewGame();//completely new game
                break;
            case R.id.continue_button:
                 try{
                     transitionToGameView();
                     loadGame();//reloaded game
                 }catch(NullPointerException npe) {
                     System.out.println("No any data");
                     /*in case if user pressed exit,when firstly entered to main menu,and then,at second time pressed continue and
                     nothing was saved in this activity
 
                      */
                     //System.exit(1);
                     game.startNewGame();
                 }
                break;
            case R.id.about_button:
               intent=new Intent(this,AboutActivity.class);
                startActivityForResult(intent, RequestCode.REQUEST_CODE_ABOUT);
                break;
            case R.id.exit_button:
                finish();
                break;
        }
 
    }
 
 
}
Yandex
Объявления
10.08.2015, 19:18     Поставить игру на паузу и продолжить с этого же места
Ответ Создать тему
Опции темы

Текущее время: 02:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru