LINUX.ORG.RU

Сообщения abs

 

Подскажите кроссплатформ фреймворк для мобильного приложения

Форум — Development

Хочу написать приложение которое берет расписание(я из кпи, у нас есть апи) и на основе этого вырубает звук на парах, включает звук на переменах, после пар. В основном хочу просто потренироваться писать приложения, но таки ситуация когда пропустил звонок из-за беззвука случалась.

Собственно вопрос, а как принято это делать? Для игр я использовал libGDX, но что использовать для приложения? Желательно что-то такое что самое популярное на рынке(чтоб потом помогло при поиске роботы), кроссплатформенное(не С# ибо вообще не знаю, java(приоритет) или C++ подойдет). У меня есть только android и windows phone, но разуется хотелось бы чтоб работало и на айос.

Немного погуглив я так понял что все эти кроссплатформенные фреймворки представляют из себя запущенный веббраузер с одинаковым html/css/js кодом?

Нужен ли мне нативный вид элеметнов? А я не знаю, насколько это ценится в реальной жизни, что требуют работодатели?

 , ,

abs
()

android lifecycle lock screen работает странно

Форум — Development

У меня есть отдельный от активити статичный поток который выполняет рисование. При выключении экрана срабатывает метод onPause и я выключаю рисование(чтоб ресурсы батареи не тратились), при включении экрана появляется lock screen, несмотря на это в моем активити срабатывает onResume.

Как мне правильно отловить событие когда мое активити снова становится видно

 

abs
()

Правильно ли я выбрал паттерн

Форум — Development

Хочу воспользоваться паттерном состояние. У меня есть стартовый экран в игре(написано как играть, рекорд очков), есть сама игра, есть состояние gameOver из которого можно снова начать играть.

Но я все это сделал без паттернов. И возникает проблема в методе gameOver - в этом методе я удаляю все объекты, и вызываю метод newGame в котором создаю их заново. Проблема в том что в этот момент игра падала(так как происходило обращение к объектам которые я удалил), и мне пришлось метод gameOver вынести в самый конец цикла обновлений.

Чтоб избежать такой ситуации в будущем я хочу 1) применить паттерн состояние. 2) сделать метод changeState(State newState), в котором делать какие-то действия не сразу, а когда завершится кадр. То есть я в любом месте пишу changeState(State.GameOver); А в конце кадра. applyStateChange()

 

abs
()

Как возводить любые числа в любые степеня в уме.

Форум — Science & Engineering

сабж

 

abs
()

Программа для просчета токов на резисторе под линукс

Форум — Desktop

Много заданий по теории электроцепей, хочу прогу чтоб проверять правильность решения. Схемы простые, в плане что только резисторы, постоянный ток. Есть источники напряжение, источники тока.

 

abs
()

Android UIL плохо работает

Форум — Development

Загружаю 10 картинок из интернета, использую universal image loader(UIL) для кеширования. Эти 10 картинок в списке, проблема в том что при скроллинге сначала они подгружаются через секунду примерно, а дальше и вовсе секунд через 5-10. Вот код адаптера

@Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowView = inflater.inflate(R.layout.video_preview_item, parent, false);

        TextView textView = (TextView) rowView.findViewById(R.id.textView);
        ImageView imageView = (ImageView) rowView.findViewById(R.id.imageView);

        final FrameLayout frameLayout = (FrameLayout) rowView.findViewById(R.id.frameLayout);
        frameLayout.getLayoutParams().height = (int) (values[position].imageHeight * 0.8f);
        

        
        DisplayImageOptions options = new DisplayImageOptions.Builder().
                cacheOnDisk(true).
                cacheInMemory(false).
                delayBeforeLoading(0).
                bitmapConfig(Bitmap.Config.RGB_565).
                resetViewBeforeLoading(false).
                postProcessor(new BitmapProcessor() {
                    @Override
                    public Bitmap process(Bitmap bmp) {
                        int width = context.getResources().getDisplayMetrics().widthPixels;
                        int height = width*bmp.getHeight()/bmp.getWidth();
                        return Bitmap.createScaledBitmap(bmp, width, height, false);
                    }
                }).
                build();
        
        if(position + 1 != values.length) {   // Это попытка загружать следующею картинку, эффекта не принесло 
            ImageLoader.getInstance().loadImage(values[position+1].imageUrl, options, new SimpleImageLoadingListener() {
                        @Override
                        public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                            // Do whatever you want with Bitmap
                        }
                    });
        }

        ImageLoader.getInstance().displayImage(values[position].imageUrl, imageView, options , new ImageLoadingListener() {
                    @Override
                    public void onLoadingStarted(String imageUri, View view) {
                        //...
                    }
                    @Override
                    public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
                        //...
                    }
                    @Override
                    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {

                        int clientWidth = context.getResources().getDisplayMetrics().widthPixels;
                        int calHeight = loadedImage.getHeight() * clientWidth/loadedImage.getWidth();
                        values[position].imageHeight = calHeight;
                        frameLayout.getLayoutParams().height = (int) (values[position].imageHeight * 0.8f);
                        FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) view.getLayoutParams();
                        params.height = values[position].imageHeight;
                        //((FrameLayout.LayoutParams) view.getLayoutParams()).setMargins(40,0,0,0);
                        //params.setMargins(0, 0, 0, 0);
                        //Log.e("what", "")
                    }
                    @Override
                    public void onLoadingCancelled(String imageUri, View view) {
                        //...
                    }
                }
        );
        

        textView.setText(values[position].clipName);


        return rowView;
    }

 

abs
()

Очень странное поведение listView

Форум — Development

Я пытаюсь сделать паралакс эффект, и наконец я его вроде сделал, проблема в том что он работает для верхних элементов, а для нижних(чем ниже тем хуже) не работает. Вот код

listView.setOnScrollListener(new AbsListView.OnScrollListener() {

            //int lastTop = 0;
            HashMap<Integer, Integer> lastBottom = new HashMap<Integer, Integer>();
            int SIZE = 400;

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                                 int visibleItemCount, int totalItemCount) {

//
                int pos = view.getFirstVisiblePosition();
                Log.e("what", "first visible position :" + pos + " visibleItemCount :" + visibleItemCount);  // На нижних элементах это работает. 

                for(int i = pos; i < pos+visibleItemCount; i++){
                    View child = view.getChildAt(i);
                    if(child != null) {
                        int bottom = SIZE - child.getBottom();
                        if(lastBottom.get(i) == null){ lastBottom.put(i, 0); }
                        if (lastBottom.get(i) != bottom) {
                            TextView textView = (TextView) child.findViewById(R.id.textView);
                            ImageView imageView = (ImageView) child.findViewById(R.id.imageView);
                            textView.setText("bottom : " + bottom); // На нижних элементах текст не обновляется.
                            FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) textView.getLayoutParams();
                            

                            FrameLayout.LayoutParams params1 = (FrameLayout.LayoutParams) imageView.getLayoutParams();
                            params1.setMargins(0,0,0, -bottom / 10);
                            imageView.setLayoutParams(params1);


                            lastBottom.put(i, bottom);
                        }
                    }
                }
            }

            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {

            }
        });

Элементов 10, каждый элемент представляет собой такое

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/frameLayout"
    android:layout_width="match_parent"
    android:layout_height="300px">



    <ImageView
        android:layout_width="match_parent"
        android:layout_height="600px"
        android:layout_gravity="bottom"
        android:id="@+id/imageView" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="New Text"
        android:layout_gravity="bottom"
        android:textSize="30sp"
        android:textColor="#fff"
        android:paddingTop="30sp"
        android:background="@drawable/gradient"
        android:id="@+id/textView" />
</FrameLayout>

 

abs
()

Как обновить view в listView

Форум — Development

Если при создании(в адаптере) написать следующее

((FrameLayout.LayoutParams) textView.getLayoutParams()).setMargins(40,0,0,0);
Работает.(У текста отступ в 40 пикселей слева). Я хочу сделать паралакс эффект при скроллинге. И создается такое впечатление что view не хочет применять параметры которые я ему ставлю(

listView.setOnScrollListener(new AbsListView.OnScrollListener() {
            @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                                 int visibleItemCount, int totalItemCount) {
///////// something code/////////

                    TextView textView = (TextView) firstChild.findViewById(R.id.textView);
                    textView.setText("" + topY / 2); // Это работает, таким образом я убедился что пытаюсь добавить отступ нужному textView

                    FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) textView.getLayoutParams();
                    params.setMargins(topY / 2, 0, 0, 0);
                    firstChild.invalidate(); // Не работает(firstChild это "родитель" textView )
                    textView.invalidate();   // Не работает

 

abs
()

Странная утечка памяти ,Android

Форум — Development

Хочу сделать паралакс эффект, пытаюсь таким кодом

listView.setOnScrollListener(new AbsListView.OnScrollListener() {
            @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                                 int visibleItemCount, int totalItemCount) {

                int pos = view.getFirstVisiblePosition();
                View firstChild = view.getChildAt(pos);
                if (firstChild != null) {
                    topY = firstChild.getTop();
                    TextView textView = (TextView) firstChild.findViewById(R.id.textView);
                    ImageView imageView = (ImageView) firstChild.findViewById(R.id.imageView);
                    FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) imageView.getLayoutParams();
                    params.setMargins(0, -topY / 2, 0, 0);
                    imageView.setLayoutParams(params); // ВОТ ТУТ УТЕЧКА, Коментируем строчку - утечки нет. 
                }
Утечка просто жуткая, по мегабайту за секунду, доходит до 16 мегабайт и приложение падает. В чем тут проблема, или какие есть другие способы реализовать параллакс?

 ,

abs
()

как быстро разобраться с UI под Android

Форум — Development

Хочу сделать казалось бы банальную вещь, список с картинками, поверх картинки текст. Создал свой собственный адаптер, и застрял на попытки создать layout

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:src="@drawable/image"
        android:id="@+id/imageView"
         />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="New Text"
        android:layout_alignBottom="@id/imageView"
        android:gravity="bottom"
        android:id="@+id/textView" />
</RelativeLayout>

Я хотел чтоб ширина картинки была равна ширине экрана, а высота картинки вычислялась пропорционально. Для самой картинки это сработало, но вот размер RelativeLayout почему-то раза в 2 выше. Где есть описание как всем этим пользоваться?

 ,

abs
()

Пытаюсь учить паттерны, подскажите какой использовать

Форум — Development

В общем читаю я http://gameprogrammingpatterns.com Вроде все вещи и понятные, только совсем не ясно где все это применять, я уж было расстроился, как вдруг сегодня осознал что таки мне паттерн нужен в игре которую я пишу, идея следующая.

Вы управляете шариком на экране, есть два варианта управления,

стрелочки клавиатуры придают шарику ускорение по соответствующим осям координат. 
стрелочки клавиатуры заставляют шарик ускорятся или замедлятся, поворачивать в ту или иную сторону

Как мне реализовать это? В голову приходит что-то типа создать один общий класс контроля, от него отнаследовать два с нужным мне поведением, а дальше у меня проблемка, что с этими классами делать? Да и что им передавать? Массив нажатых клавишь? Или при нажатии каждой клавиши передавать её?

 ,

abs
()

openGL кеширует вызовы? Или как профилировать

Форум — Development

Пишу на libGDX, некоторые люди жалуется на просадку ФПС, начал профилировать, но вот вопрос, а опенГЛ на самом деле все рисует когда происходит вызов методов или он все запоминает,а рисовать будет в конце кадра и ориентироваться на это время нельзя? Собственно с виду все похоже на то что он рисует сразу по месту

 ,

abs
()

Подскажите систему отслеживания ошибок для одного

Форум — Development

Работаю один, над относительно небольшим проектом, но уже начинаю замечать что забываю найденные мелкие баги. Хотелось бы программу в которую я мог бы добавлять баги в одну «колонку», а после исправления перемешать их в колонку исправленных. Идеальным бы решением было бы что-то онлайн. С другой стороны если есть какой-то общепринятый корпоративный стандарт который мне придется потом учить в будущем можно заюзать и это.

Я немного погуглил это, там были относительно громоздкие системы где при оформлении бага нужно указывать кто нашел, как воспроизвести, кратное описание. Дальше один из программистов выбирал его себе на рассмотрение, исправлял и отдавал обратно тестировщикам. Мне же это все излишне(ну может как воспроизвести будет нужно).

UPD баги вида «исправить ошибку в слове там-то и там», «почему то поехал текст на пару пикселей вверху».

 , ,

abs
()

java, не упустить дебажный участок кода

Форум — Development

Иногда я пишу участок кода который позволяет удобней тестировать(например, игра тетрис, падает 40 блоков - показывается меню, мне лень ждать 40 - поставил 1), таких мест может быть много, сейчас я помечаю их TODO, но даже про TODO можно банально забыть. Как поступать в таких ситуациях?

Вот такой вариант будет хорошим?

public class GlobalVars{
static final boolean DEBUG = true;
}

А во всем другом коде помешать это все в

if(GlobalVars.DEBUG){
// никогда не должно попадать в релиз
}else{
// стандартная логика
}

Блин, ребят, новая проблема всплыла,а как это в коде то все красиво сделать? Сейчас так

if(balls.size > 15) { // TODO not 15 must be MAX_BALL
                        state = State.GAME_OVER;
                        Animation.add("gameOverBlack", 1, 0.4f, 700, new Animation.Sin());
                        Animation.add("gameOverOpacity", 0, 0.85f, 700, new Animation.Sin());
                        //Animation.add("gameOverBlack", 1, 0.4f, 600, new Animation.Linear());
                        //Animation.add("gameOverOpac", 1, 0.4f, 1);
                    }

А дальше появилось несколько вариантов, самый короткий но сложный

if(  (balls.size > 15 && GlobalVars.DEBUG) || balls.size > MAX_BALL )
Можно вообще обобщить 
if( (debug_condition && GlobalVars.DEBUG) || release_condition) 

Или же

if(GlobalVars.DEBUG){
  if(debug_condition){
    // несколько строк, скорее всего одинаковых с нижними
  }else
    // несколько строк... одинаковых...
  }
}else{
  if(release_condition){
    // несколько строк, скорее всего одинаковых с нижними
  }else
    // несколько строк... одинаковых...
  }
}

 , ,

abs
()

libGDX, static field game in AbstractGame

Форум — Development

Код который я видел раньше в примерах заключался в том чтоб при создании любого экрана передать в него переменную на «главный» класс Game;

Если из одно экрана нужно было установить другой то это производилось примерно так

game.setScreen(new AnotherScreen(game, something else...)); 

Я попробовал наследовать каждый экран от своего AbstractScreen, в которое добавил статическое поле game; И при старте игры в самом классе Game сделал

AbstractScreen.game = this; 

Это все работает, выглядит очень лаконично и красиво, но в чем кроется проблема? Почему так никто не делает?

 ,

abs
()

netty через блютуз, android

Форум — Development

Пробую добавить в свою игру мультиплеер, сейчас сделал так чтоб запускался сервер в сети, другой телефон к нему подключается. Теоретически достаточно подключится к одну и тому же роутеру по Wi-Fi чтоб поиграть. Но хотелось бы сделать возможность играть через блютуз. Что-то серверное я пишу второй раз в жизни и опыта у меня маловато, а по netty в гугле инфы тоже мало. Скажите это вообще возможно то что я хочу, и если да то в какую сторону копать?

 , ,

abs
()

Qt обработка звука

Форум — Development

Помните мою прогу LsdDraw ? Хочу добавить туда некую зависимость от звука, как со звуком работать в Qt? Желательно получить поток который сейчас проигрывается в системе (пользуюсь pulseAudio) но если реалтаймово не получится то можно и просто сделать предобработку звука. Но как? Я в этом мало что смыслю. Может кто писал на Qt что-то похожее, поделитесь опытом и/или исходниками.

 , ,

abs
()

Придумал концепт, не понимаю почему такого нет

Форум — Development

Я пишу на libGDX, и это очень маленький фреймоворк в котором по минимум нужного функционала. И я задумался, а почему там мало функционала? Чтоб получить маленький размер apk? Ну ок, а разве нельзя системой сборки пройтись и посмотреть какие методы используются, а какие нет и собрать только нужные файлы?

А теперь конкретный пример после которого я решил это написать. В libGDX есть Color, можно задать в некоторых форматах типа argb8888,rgba8888 и так далее. Но нет hsv, с одной стороны оно и не нужно, а с другой читайте текст выше. Хуже от этого точно никому не станет.

 , ,

abs
()

На чем писать сервер для игры

Форум — Development

У меня есть синглплеер андроид игра(играть против ботов) в которую было бы интересно добавить возможность или онлайн игры на большой карте, или просто друг против друга где сейчас игра с ботом. На чем собственно принято сейчас писать сервер? На роботе где я устроился на испытательный срок используется на клиенте netty, но он на джаве и я не уверен что это то что нужно. Из языков которые знаю это С++, джава. Пробовал делать сервер на node.js. Собирался учить пайтон.

Требований к серверу особых нету, желательно только чтоб можно было найти недорогой хостинг потом куда это все поставить.

 ,

abs
()

В джаве слишком много преобразований double->float , float->double ?

Форум — Development

Раньше когда я говнокодил то по привычке писал float для всех чисел для которых не нужна точность, но потом получалось так что большинство параметров требуют передачи float, а большинство функций возвращают double вместо float, та даже банальная запись дробного числа это дабл. Но вот читаю я сейчас чужой код с которым мне нужно работать и вижу там следующие

bullet.setInertion((float)Math.sin(angle), (float)Math.cos(angle), 0, 0);

Собственно это нормальная штатная ситуация, или же так делать не принято? Тогда какое решение? Вот хоть с данным куском кода, гуглил когда-то Math для фтоатов, нет такого. Переписать класс bullet чтоб он принимал и работал внутри с даблом? А насколько сильно это скажется на производительности?

 ,

abs
()

RSS подписка на новые темы